2 votes

La boucle 'while' ne s'exécute pas?

J'ai un commentaire dans mon code pour expliquer vers quel résultat final je tends, mais s'il vous plaît ne répondez pas à la manière dont je pourrais atteindre cet objectif tout en répondant à cette question.

En gros, j'ai un entier étiqueté "currentNum" qui est égal à 1. J'ai une boucle while qui doit s'exécuter jusqu'à ce que currentNum soit inférieur à quatre millions. Cependant, pour une raison quelconque, la boucle ne s'exécute pas. Tout ce qui se trouve en dehors de la boucle while s'exécute, mais la boucle while elle-même ne fonctionne pas.

'HI' est affiché une fois dans la console. 'LOOP' n'est pas affiché dans la console.

Code :

 /*Chaque nouveau terme dans la séquence de Fibonacci est généré en ajoutant les deux termes précédents. 
  * En commençant par 1 et 2, les dix premiers termes seront :
  * 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
  * En considérant les termes de la séquence de Fibonacci dont les valeurs n'excèdent pas quatre millions, 
  * trouvez la somme des termes ayant une valeur paire.*/

public class Solution {

public static void main(String args[]) {

    int lastNum1 = 0;
    int lastNum2 = 0;
    int currentNumEven = 0;
    int currentNum = 1;
    int sumEven = 0;
    boolean last = true;

    System.out.println("HI");

    while(currentNum < 4000000);

    System.out.println("LOOP");

    currentNum = currentNum + (lastNum1 + lastNum2);

    if(last) {
        lastNum1 = currentNum;
        last = !last;
    } else {
        lastNum2 = currentNum;
        last = !last;
    }

    if(currentNum % 2 == 0) {
        currentNumEven = currentNum;
        sumEven += currentNum;
        System.out.println(currentNumEven);
        System.out.println(currentNum);
    }

    if(currentNum < 4000000) {
    currentNum++;

    } else {
        System.out.println("Somme de toutes les valeurs paires de Fibonacci : " + sumEven + "\n Dernier nombre pair de la séquence inférieur à 4 000 000 : " + currentNumEven);
      }

   }

}

7voto

Óscar López Points 97105

L'erreur se trouve dans cette ligne :

 while(currentNum < 4000000);

Ce dernier ; est mal placé ! après la condition while vous devriez mettre une accolade ouvrante {, puis une autre accolade fermante } à la fin de la boucle, pour fermer le bloc. Comme ceci :

while (currentNum < 4000000) {
    // corps de la boucle
}

1voto

mel3kings Points 1201

Erreur de syntaxe. La syntaxe correcte est :

faire{
 //mettez vos codes ici
}
tant que(currentNum < 4000000);

ou

tant que(currentNum < 4000000){
//mettez vos codes ici
}

0voto

BlackHatSamurai Points 6211

Utiliser un ; déclare la fin d'une instruction. Essayez ceci:

public class Solution {

public static void main(String args[]) {

int lastNum1 = 0;
int lastNum2 = 0;
int currentNumEven = 0;
int currentNum = 1;
int sumEven = 0;
boolean last = true;

System.out.println("HI");

while(currentNum < 4000000){

System.out.println("LOOP");

currentNum = currentNum + (lastNum1 + lastNum2);

if(last) {
lastNum1 = currentNum;
last = !last;
} else {
lastNum2 = currentNum;
last = !last;
}

if(currentNum % 2 == 0) {
currentNumEven = currentNum;
sumEven += currentNum;
System.out.println(currentNumEven);
System.out.println(currentNum);
}

if(currentNum < 4000000) {
currentNum++;

} else {
System.out.println("Somme de toutes les valeurs Fibonacci paires: " + sumEven + "\n Dernier nombre pair de la séquence inférieure à 4 000 000: " + currentNumEven);
}
}
}

}

0voto

WeldFire Points 118

Je crois que la ligne suivante est où se trouve votre problème

while(currentNum < 4000000);

Cela provoque une boucle infinie car "currentNum" n'est jamais incrémenté.

while(currentNum < 4000000);

\==

while(currentNum < 4000000){
}

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