+1 à Daniel DiPaolo. Je pensais que je posterais une réponse séparée pour fournir une clarification de pourquoi c'est le cas.
Les boucles Java peuvent être écrites de deux manières différentes. S'il y a une seule ligne au corps de la boucle, vous pouvez les écrire de façon sténographie:
while (true)
System.out.println("While loop");
Cette imprimera « While » sur la console jusqu'à ce que le programme se termine. L'autre option est de spécifier un corps de boucle entre accolades, comme vous l'avez fait ci-dessus:
int i = 0;
while (i < 10) {
System.out.println("i = " + i);
i++;
}
Cette imprimera "i = 0", "i = 1", ..., "i = 9" chacun sur une ligne séparée.
Ce que le code que vous avez posté est confondre les deux. Dans la boucle while short, l'analyseur Java s'attend à trouver une déclaration entre la condition de boucle while et le point-virgule. Parce qu'il ne trouve pas de déclaration ici, la boucle while s'exécute, mais ne fait rien; il n'a pas de corps. De plus, comme la boucle n'a pas de corps, votre variable r n'a aucune possibilité d'assumer une nouvelle valeur; la condition est toujours évaluée à true et la boucle ne se ferme jamais.
Si vous deviez annuler la condition dans la boucle while dans votre exemple, c.-à-
boolean r = false ; int s = 0 ;
while (r != false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
(notez que j'ai quitté le point-virgule erroné là), vous constaterez que votre corps en boucle destiné exécuterait précisément une fois, car la boucle ne serait jamais exécutée.
De même, ce n'est pas une boucle infinie, donc la balise 'infinite-loop' n'a pas de sens. –
En fait, c'est une boucle infinie. 'while (r == false);' est une boucle infinie ne faisant rien, puisque r est initialisé à false. –
Arrêtez d'essayer de mettre plusieurs choses sur une ligne. Autant que n'importe quoi, c'est ce qui a causé votre problème. Une fois que vous avez pris l'habitude d'écrire clairement, vous verrez que ce genre de chose arrive beaucoup moins. Également mettre vos avertissements en éclipse plus haut - il aurait dû vous indiquer la déclaration vide. Ne pas simplement résoudre ce problème, réparer les causes profondes. –