J'essaie plusieurs exercices d'un livre de programmation Java. J'ai le code ci-dessous: Le problème est que la boucle tandis que la boucle ne semble pas fonctionner. Chaque fois que j'entraîne "STOP" comme étant l'EMPLOI, le programme passe simplement. J'ai essayé de remplacer "STOP" avec une autre chaîne et cela ne fonctionne toujours pas. Mais lorsque j'essaie d'initialiser EmailEname avec "Stop", le programme quitte tout de suite, ce qui est attendu. Qu'est-ce que je fais mal ici? P> En outre, après la première boucle, le programme saute toujours demander à l'emploi. J'ai essayé de remplacer Merci d'avance pour l'aide! p> p> EmailAname = INPUT.NEXTLINE (); code> avec
EMBALYENAME = INPUT.NEXT (); code> et il ne le saute plus. Je me demande cependant, y a-t-il un moyen de ne pas sauter l'entrée lorsque vous utilisez
EMBALYENAME = INPUT.NEXTLINE (); CODE>? P>
4 Réponses :
Lors de la comparaison des chaînes en Java, utilisez une méthode Equals, non == ou! = opérateurs. En utilisant ces opérateurs, vous comparez simplement des références aux objets et non à leur contenu. Donc, votre condition devrait ressembler à note que "stop" est d'abord car théoriquement votre variable de nom d'emploi peut être null. De cette façon, le code ne va pas lancer nullpointException code> en appelant la méthode égale sur l'objet NULL. P> P>
Vous voulez probablement dire tandis que (! "Arrêtez" .equals (Employé)) Code> Pour faire correspondre la signification du code exemple, non?
J'aime l'expression "yoda" :)
Le problème est que vous n'utilisez pas la bonne structure et vous devez utiliser égaux () code> pas
== code> pour comparer
chaîne code> s . La structure de base que vous souhaitez est la suivante:
System.out.printf("\nInput employee name or stop to exit: ");
String employeeName = input.nextLine();
while (!employeeName.equals("stop")) {
...
System.out.printf("\nInput employee name or stop to exit: ");
employeeName = input.nextLine();
}
Merci pour l'entrée sur la boucle tandis que la boucle et les conventions de programmation! Je n'ai pas réalisé que mon espacement et mon placement est différent de celui-ci.
Je suppose que c'est parce que le test ! = code> Vous utilisez dans le
pendant que code> la boucle compare les chaînes pour l'égalité de référence. C'est-à-dire que lorsque cela fait une comparaison, il ne s'agit pas simplement de vérifier si les chaînes ont la même séquence de caractères; Il vérifie si elles sont exactement le même objet em>. Mais lorsque le scanner
crée un code> chaîne code> Pour contenir le texte, il est lu à partir d'une entrée standard, que
chaîne code> ne sera pas le même objet que le string littéral
"stop" code> dans votre code. Ce sont deux objets qui viennent d'avoir le même contenu, mais ils existent à différents endroits en mémoire, donc
! = Code> traite comme étant inégal. Solution: démarrez votre boucle comme ça : p>
Les affiches précédentes Ditto sur == Versus sont égales. P>
Cela fonctionne lorsque vous initialisez EmailAname pour "arrêter" car le compilateur Java voit deux chaînes identiques et réutiliser l'objet. C'est: p>
String Emporteename = "Stop"; Si (EmployeName == "STOP") ... etc ... p>
Le test évalue en true, car Java crée un objet pour contenir la première chaîne, il remarque que la deuxième chaîne est identique, de sorte qu'elle réutilise l'objet, et donc la comparaison == comparaisse un objet à lui-même. < / p>
Mais si, à la place, vous lisez le nom de l'emploi du clavier ou un fichier, le compilateur bien sûr ne sait pas ce que quelqu'un saisira, un nouvel objet est créé pour contenir cette valeur et une comparaison == Les objets de chaîne renvoient FALSE. P>