2010-09-11 6 views
0

Je viens de lire sept threads liés aux problèmes de Java Scanner, mais aucun ne contenait la réponse à mon problème. J'essaie d'obtenir l'entrée de l'utilisateur à partir de la console. Je crée un objet Scanner (entrée) puis essaye de stocker la commande de l'utilisateur dans une chaîne appelée "commande". Ensuite, je transmets "command" à la fonction runGame d'origine. Il semble que Scanner/commande lisent le texte en écriture. (Si j'entre 'd', puis j'imprime le contenu de la commande, il imprime 'd'.)Problèmes Java - Entrée du scanner et instructions If (X == Input)

Mais quand je retourne la chaîne et la mémorise dans nextMove, elle se casse. Par exemple, je vais entrer 'd' mais ensuite (nextMove == 'd') si l'instruction n'est pas appelée. En fait, peu importe ce que je saisis, seule l'instruction else est entrée.

Qu'est-ce que je fais mal? Comment puis-je corriger

Voici le code de fonction d'origine:

public void runGame() { 
     drawWindow(); 
     while(true) { 
      String nextMove = takeInput(); 
      if(nextMove == "d") 
       System.out.print("WORRRRDDD d"); 
      else if(nextMove == "w") 
       System.out.print("WORRRRDDD w "); 
      else { 
       drawWindow(); 
       System.out.print("YOU GOT ELSED"); 
       continue; 
      } 
     } 
} 

Et voici le code de fonction takeInput/Scanner:

public String takeInput() { 
    String command; 
    input = new Scanner(System.in);  // "input" is the Scanner object used for all input. 
    try{ 
     System.out.print("Enter command (d, w, stop, restart, exit): "); 
     command = input.next(); 
    } catch(Exception e) { 
     System.out.println("You entered an invalid command."); 
     return null; 
    } 
    System.out.println("\n RETURNING COMMAND" + command + " \n"); 
    return command; 
} 

Pendant que vous aidez (je vais pour chercher, mais si je ne le trouve pas), quelle est la meilleure façon de reconnaître une entrée vide dans un objet scanner?

Et devrait-il y avoir d'autres exceptions/captures dont j'ai besoin de s'inquiéter pour l'entrée de l'utilisateur dans une console?

+0

Je me trompe peut-être, mais je ne pense pas que les instructions chaîne java sont faites avec == –

+0

Attendez une minute, c'est parce que j'ai besoin d'utiliser .equals() n'est-ce pas? –

+0

yup je crois que oui –

Répondre

1

vous ne devriez pas utiliser == pour la comparaison de chaîne, si je me souviens bien utiliser comparer, comparer à ou égal.

2

Plutôt que d'utiliser ==, utilisez .equals(String), de sorte que votre chèque ressemblerait à ceci:

if(nextMove.equals("d")) 

== vérifie que les variables sont la même référence exacte en mémoire, .equals() vérifie que les deux instances sont logiquement équivalentes.

0

Vous ne devez pas utiliser la méthode "==" pour comparer deux objets String. Vous devrez utiliser la méthode .equals().

Votre partie du code modifié doit ressembler à:

if(nextMove.equals("d")) 
     System.out.print("WORRRRDDD d"); 
    else if(nextMove.equals("w")) 
     System.out.print("WORRRRDDD w "); 

Pourquoi? référencée à partir de here

L'opérateur « == » compare deux références d'objet pour voir si elles se réfèrent à la même instance. Il vérifie si deux objets sont exactement le même objet ou non. Deux chaînes peuvent être objets différents, mais peuvent avoir la même valeur (ont exactement les mêmes caractères ). Dans ce cas, "==" retournera false.

Faites particulièrement attention lorsque vous comparez des objets .Si vous souhaitez voir si deux objets sont identiques ou non, alors utilisez "==" pour, ou utilisez égal() pour voir si ils ont la même valeur.

Vérifiez également les liens suivants:

http://www.zparacha.com/java-string-comparison/

http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

http://www.javabeginner.com/learn-java/java-string-comparison

2

Comme d'autres l'ont dit, l'utilisation .equals lors de la vérification de l'égalité entre les chaînes.

En outre, chaque fois que vous avez une constante dans votre contrôle d'égalité, vous devez le mettre en premier. par exemple.

"abc".equals(someString); 

Cela ne sera jamais qu'un booléen. Attendu que:

someString.equals("abc"); 

Cela peut être une valeur booléenne ou une NullPointerException.

Questions connexes