4 votes

La boucle s'arrête de fonctionner java

Pour le code ci-dessous, il s'arrête de fonctionner lorsque "n" atteint environ 100 000. J'ai besoin qu'il fonctionne jusqu'à 1 million. Je ne sais pas où ça ne va pas, je suis encore en train d'apprendre Java donc il peut y avoir des erreurs simples dans le code aussi.

 public class Problem14{
public static void main(String[] args) {
    int chainLength;
    int longestChain = 0;
    int startingNumber = 0;
    for(int n =2; n<=1000000; n++)
    {
        chainLength = getChain(n);
        if(chainLength > longestChain)
        {
            System.out.println("chainLength: "+chainLength+" start: "+n);
            longestChain = chainLength;
            startingNumber = n;
        }
    }

    System.out.println("longest:"+longestChain +" "+"start:"+startingNumber);
}
public static int getChain(int y)
{
    int count = 0;
    while(y != 1)
    {
        if((y%2) == 0)
        {
            y = y/2;
        }
        else{
            y = (3*y) + 1;
        }
        count = count + 1;
    }

    return count;   
}
}

6voto

Kumar Vivek Mitra Points 19369

Veuillez utiliser long comme le data type au lieu de int

Je veux que cela soit mis en lumière, que le nombre fait flèche plus haut que 1000000, donc variable y besoins long pour le tenir.

5voto

Dan Points 944

C'est le type de données pour y . Il devrait être long . Sinon, il s'arrondit à -2 milliards.

Je pensais avoir reconnu ceci - c'est le problème Euler 14. Je l'ai fait moi-même.

1voto

AmitD Points 12541

La méthode getChain() est à l'origine du problème : elle arrive à une valeur négative, puis se bloque indéfiniment dans la boucle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X