2013-02-18 5 views
-2

Salut les gars Im essayant de sortir d'une boucle avec ce morceau de code, mais avant la fin, il imprime toujours les lignes que je ne veux pas:boucle java ne se termine pas correctement

do { 
     System.out.println("Would you like to change one of the numbers (y/n)?"); 
     choice = kb.next().charAt(0); 
     System.out.println("Please enter the index of the number you want to change:"); 
     indexChange = kb.nextInt(); 
     System.out.println("Please enter the number you want to change:"); 
     changedIndex = kb.nextInt(); 
     elements[indexChange - 1] = changedIndex; 
     for (int i = 0; i < elements.length; i++) 
      System.out.println(index[i] + elements[i]); 

    } while (choice != 'n'); 

Ces deux lignes impriment toujours sur avant la fin de la boucle: "Veuillez entrer le numéro que vous voulez changer:" & "Veuillez entrer le numéro que vous voulez changer:". Quelqu'un d'entre vous peut-il aider avec cette faute?

+1

Utilisez un débogueur! –

+1

Ceci est un problème de logique, un débogueur ne serait pas d'une grande aide. Le crayon et le papier seraient beaucoup plus rapides. –

+0

@ A - C Eh bien, un bon débogueur comme ceux fournis dans Eclipse et NetBeans vous montre les valeurs réelles de vos variables pour chaque ligne. Vous pouvez utiliser cette information pour trouver l'erreur de logique tout en testant votre code en même temps. –

Répondre

3

Vous devez utiliser un break dans votre boucle. Dans ce cas, il n'est pas nécessaire de vérifier choice au début ou à la fin de chaque itération de la boucle, vous pouvez donc simplement utiliser while (true) pour boucler jusqu'à atteindre break.

while (true) { 
     System.out.println("Would you like to change one of the numbers (y/n)?"); 
     choice = kb.next().charAt(0); 
     if (choice == 'n') 
      break; 
     System.out.println("Please enter the index of the number you want to change:"); 
     indexChange = kb.nextInt(); 
     System.out.println("Please enter the number you want to change:"); 
     changedIndex = kb.nextInt(); 
     elements[indexChange - 1] = changedIndex; 
     for (int i = 0; i < elements.length; i++) 
      System.out.println(index[i] + elements[i]); 

    } 

Soyez prudent avec ceci, cependant. Il est assez facile d'écrire accidentellement des boucles infinies!

+0

Il serait bon d'expliquer pourquoi le passage de la boucle 'do-while' à une boucle' while'. Pourtant, j'ai trouvé cette solution meilleure que la double vérification ou le double 'if-else' qui vérifie la condition de rupture. –

1

Vous devez vérifier la condition de sortie avant de manipuler l'entrée restante ...

do { 
    System.out.println("Would you like to change one of the numbers (y/n)?"); 
    choice = kb.next().charAt(0); 
    if (choice != 'n' && choice != 'N') { 
     System.out.println("Please enter the index of the number you want to change:"); 
     indexChange = kb.nextInt(); 
     System.out.println("Please enter the number you want to change:"); 
     changedIndex = kb.nextInt(); 
     elements[indexChange - 1] = changedIndex; 
     for (int i = 0; i < elements.length; i++) { 
      System.out.println(index[i] + elements[i]); 
     } 
    } 

} while (choice != 'n' && choice != 'N'); 

Vous devriez aussi vérifier des caractères majuscules ...

+0

Cela a fonctionné mais termine le programme sans passer à l'étape suivante du code, l'instruction while ci-dessous a fait le travail cependant. Merci pour les conseils. – user1766709

0

Cette vérification

while (choice != 'n'); 

se produit qu'une seule fois par itération de la boucle faire. Donc, dans votre boucle, vous demandez si vous voulez changer l'un des nombres, puis posez les autres questions, puis vérifiez pour voir si la valeur qu'ils ont entrée pour la première question.

Vous pouvez utiliser le mot-clé "break" pour sortir de la boucle après avoir obtenu leur choix.eg.

if (choice == 'n') 
{ 
    break; 
} 
0

Essayez ...

while(!'n'.equals(choice.toLowerCase())){...