2017-05-14 22 views
0

Also ich bin wirklich neu in Java und ich versuchte zu üben, während und wenn Aussagen durch eine Ratespiel App.Ratespiel, (While-Schleife, if-Anweisung), wieder spielen prompt nicht funktioniert

Alles schien zu funktionieren, bis ich aufgefordert werde, wieder zu spielen. Wenn ich Y eintippe, endet die Schleife. Dies soll nicht passieren, da das Argument while am Anfang des Codes sagt, dass man "keepPlaying" wenn es wahr ist.

Ich habe versucht, mit dem Argument zu spielen, um es zu machen: while (antwort == "Y"). Ich habe damit herumgespielt, aber es bleibt immer spannend. Bitte helfen Sie !!

Hier ist der Code:

import java.util.Scanner; 
public class GuessingGame 
{ 
    static Scanner sc = new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     // TODO Auto-generated method stub 
     String answer = "Y"; 
     int guess; 
     int number; 
     String again; 
     boolean keepPlaying = true; 


     System.out.println("Let's play a guessing game!"); 
     while (keepPlaying) 
     { 
      System.out.println("I'm thinking of a number between 1 and 10."); 
      System.out.print("What do you think it is? "); 
      guess = sc.nextInt(); 
      while (guess > 10 || guess < 1) 
      { 
       System.out.print("I said, between 1 and 10. Try again: "); 
       guess = sc.nextInt(); 
      } 
      number = (int)(Math.random() *10 + 1); 
      if (guess == number) 
      { 
       System.out.println("You're right!"); 

      } 
      else 
      { 
       System.out.println("You're wrong! the number was " + number); 

      } 
      System.out.print("Play again? (Y or N)"); 
      answer = sc.next(); 

      if (answer == "Y") 
      { 
       keepPlaying = true; 
      } 
      else 
      { 
       break; 
      } 

     } 
     System.out.println("Thank you for playing"); 
    } 

} 
+1

Strings werden nicht verglichen mit '==' aber '.equals()' – KevinO

Antwort

0

Im Vergleich sollten Sie die String Anforderungen vergleichen mit:

if (answer.equals("Y")) // NOTE: I'd use .equalsIgnoreCase(...) 
     { 
      keepPlaying = true; 
     } 
     else 
     { 
      break; 
     } 

Beachten Sie auch, dass, da dieser Vergleich am Ende der Schleife ist, könnten Sie vereinfachen zu:

keepPlaying = answer.equalsIgnoreCase("Y"); 

Wie Sie dienicht brauchenAnweisung, da die Schleife neu ausgewertet wird.

+0

Hey Kevin, vielen Dank, dass wirklich funktioniert hat. Ich bin überrascht, wie eine einfache Optimierung dieses Problem gelöst hat. Ich bin immer noch verwirrt, wie: Antwort == "Y" hat nicht funktioniert, aber answer.equals ("Y") funktioniert. Intuitiv sind sie nicht gleich? – Mike95

+0

@ Mike95, froh, dass die Antwort geholfen hat. Bitte akzeptieren Sie die Antwort. Warum das '==' nicht funktionierte, liegt daran, dass '==', für Objekte, Tests für * Referenzgleichheit * (das heißt, sind die Objekte das gleiche Objekt), während die '.equals()' ruft die Methode auf, um nach Gleichheit zu suchen. Bei einem 'String'-Objekt prüft die' .equals() '-Methode, ob die Zeichen identisch sind. Weitere Informationen finden Sie unter [Wie kann ich Strings in Java vergleichen] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java?noredirect=1&lq=1). – KevinO

Verwandte Themen