3 votes

Java Scanner Classe

Je suis en train d'écrire un programme qui devrait fermer la console si l'utilisateur saisit la chaîne "end". Le programme exécute toujours la boucle else même si l'utilisateur saisit "end". Je me demande pourquoi le programme n'entre pas dans la partie if de la boucle et ne se ferme pas.

Scanner scan = new Scanner(System.in);
 while(true)
 {
  String num = scan.nextLine();

  if(num == "end")
  {
   System.exit(0);
  }
  else
  {
   System.out.println("salut");
  }
 }

8voto

Stephen Denne Points 17031

Vous utilisez == à la place de "end".equals(num)

5voto

mrjohn Points 521

Ne pas utiliser == pour l'égalité de chaîne car il compare les objets et non la chaîne elle-même.

Utilisez num.equals("end") ou num.equalsIgnoreCase("end") si vous souhaitez pouvoir taper end ou END

Je ne recommanderais pas d'utiliser "end".equals(num), bien que considéré comme meilleur d'un point de vue performance dans la plupart des cas, cela ne spécifie pas clairement l'exigence métier et il est plus important de le rendre plus lisible.

Mais soyez conscient que si num est null, num.equals("end") pourrait provoquer une exception et vous devriez écrire if (num!=null && num.equals("end")) { ... }

Remarquez que "end".equals(num) n'a pas besoin de vérification de null, mais je pense toujours que ce n'est pas très lisible, donc j'irais avec if (num!=null && num.equals("end")) { ... }

2voto

dc. Points 835

Pour tester l'égalité entre les chaînes de caractères, vous devriez utiliser equals() à la place.

if(a.equals(b)) et ainsi de suite.

Cela devrait vous aider : http://leepoint.net/notes-java/data/expressions/22compareobjects.html

1voto

Doozer1979 Points 1616

En Java, vous testez l'égalité des chaînes avec :

string1.equals(string2);

Donc dans ce cas, ce serait :

num.equals("end");

Ou pour éviter une exception de type NullPointerException :

"end".equals(num);

0voto

Nicholas Points 4169

Num fait référence à l'objet, donc num == "end" ne devrait jamais être. Vous voulez num.equals("end")

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