6
votes

Problème avec "alors que" en Java

J'essaie plusieurs exercices d'un livre de programmation Java. J'ai le code ci-dessous: xxx

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?

En outre, après la première boucle, le programme saute toujours demander à l'emploi. J'ai essayé de remplacer EmailAname = INPUT.NEXTLINE (); avec EMBALYENAME = INPUT.NEXT (); 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 (); ?

Merci d'avance pour l'aide!


0 commentaires

4 Réponses :


13
votes

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 à xxx

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 en appelant la méthode égale sur l'objet NULL.


2 commentaires

Vous voulez probablement dire tandis que (! "Arrêtez" .equals (Employé)) Pour faire correspondre la signification du code exemple, non?


J'aime l'expression "yoda" :)



3
votes

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();
}


1 commentaires

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.



7
votes

Je suppose que c'est parce que le test ! = Vous utilisez dans le pendant que 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 . Mais lorsque le scanner crée un chaîne Pour contenir le texte, il est lu à partir d'une entrée standard, que chaîne ne sera pas le même objet que le string littéral "stop" 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 ! = traite comme étant inégal. Solution: démarrez votre boucle comme ça : xxx


0 commentaires

0
votes

Les affiches précédentes Ditto sur == Versus sont égales.

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:

String Emporteename = "Stop"; Si (EmployeName == "STOP") ... etc ...

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.


0 commentaires