2016-07-23 18 views
-1

Ich bin ein Student, der zurzeit grundlegende Java-Klassen belegt. Ich arbeite an einem Code, der den Benutzer eine Eingabe für ein Spiel fordert, um "zu starten" und "zu beenden". Sooo ich wählte die Zeichenfolge "S" und "Q" jeweils. Wenn der Benutzer S eingibt, fährt das Spiel fort. Wenn der Benutzer Q eingibt, zeigt das Programm "Danke fürs Spielen" oder etwas an. Wenn der Benutzer etwas anderes als S und Q eingibt, fragt das Programm erneut, bis es eine gültige Eingabe erhält. I fast habe alles richtig, außer für die Fehlerprüfung Teil. Irgendwelche möglichen Vorschläge, um meinen Code zu reparieren?Fehler beim Einchecken in Java: S zum Starten und Q zum Beenden

Vielen Dank im Voraus! :)

(Teilcode)

Scanner scan = new Scanner(System.in); 
    String userInput; 
    boolean game = false; 

    System.out.println("Welcome to the Game! "); 
    System.out.println("Press S to Start or Q to Quit"); 

    userInput = scan.nextLine(); 

    if (userInput.equals("S")){ 
     game = true; 
    } else if (userInput.equals("Q")){ 
     game = false; 
    } else { 
     do { 
      System.out.println("Invalid input! Enter a valid input: "); 
      userInput = scan.nextLine(); 
     } while (!"S".equals(userInput)) || (!"Q".equals(userInput)); // I'm not sure if this is valid??? 
    } 

    if (userInput.equals("S")){ 
     ///// Insert main code for the game here//// 
    } else if (userInput.equals("Q")){ 
    System.out.println("Thank you for playing!"); 
    } 
+1

Können Sie genauer auf Ihr Problem eingehen? –

Antwort

2

Sie eine Endlosschleife erstellen:

while (!"S".equals(userInput)) || (!"Q".equals(userInput)); // always true 

zu Für diese Bedingung nicht halten Sie eine Eingabe benötigen, der gleich "S"und bis "Q" zusammen. Es ist einfach, die Anwendung De-Morgan's law zu sehen:

while (!("S".equals(userInput)) && "Q".equals(userInput))); // always true 

Offensichtlich wird es nicht passieren.

Sie wollen wahrscheinlich:

while (!"S".equals(userInput)) && (!"Q".equals(userInput)); 
+0

Der Code hat endlich funktioniert! Danke, guter Herr! –

+0

@dont_me: Bitte überprüfen Sie [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers) –

0

ich auf Antworten noch nicht stimmen kann, aber der Stand ist richtig.

die Logik Ausbrechen:

input = "Z" 
while(!(S==Z) || !(Q==Z)) -> while(!(F) || !(F)) -> while(T || T) -> repeat 

input = "Q" 
while(!(S==Q) || !(Q==Q)) -> while(!(F) || !(T)) -> while(T || F) -> repeat 

Umschalten auf "und" macht Fall # 2 zu arbeiten. Machst du irgendwas mit deinem booleschen "Spiel"? Wenn der Benutzer die while-Schleife eingibt, ist der boolesche Wert immer falsch.