2016-05-12 7 views
0

Neu in der Programmierung, und ich versuche, ein "Guess the Letter" -Spiel zu erstellen. Die Idee ist, dass die erste Person eine Taste drückt, dann drückt die zweite Person eine Taste, um zu sehen, ob sie es richtig erraten hat.Verwenden Sie System.in.read() wiederholt

Hier ist mein Code:

package bookExamples; 

public class GuessTheLetterGame { 

    public static void main(String[] args) throws java.io.IOException{ 
      char answer; 
      System.out.print("press a key and press ENTER:"); 
      answer= (char) System.in.read(); 
      char guess; 
      System.out.print("Have a guess and press ENTER: "); 
      guess = (char) System.in.read(); 
      if (guess == answer) 
        System.out.println("**Right**"); 

    } 

} 

Es läuft in Ordnung, bis die Zeile „eine Vermutung haben, und drücken Sie die Eingabetaste“, dann habe ich versucht, wieder eine Taste zu drücken, muss der Code keine Reaktion.

Vielen Dank im Voraus :)

+0

Gibt es einen Fehler entdeckt? Oder hört es einfach auf? Hast du ein Zeichen gefolgt von Enter eingegeben? – Turtle

+0

Basierend auf dem Code, den Sie eingegeben haben, wird nach Eingabe eines Schlüssels und Drücken der Eingabetaste eine Nachricht angezeigt, wenn die Antwort richtig ist. Wenn nicht, wird die Anwendung beendet. –

+1

'System.in' befindet sich im Zeilenlesemodus, so dass nichts in Ihrem Programm empfangen wird, bis Sie die Eingabetaste drücken. – Andreas

Antwort

0

Hier ist eine andere, die Original-Code Absicht übereinstimmt bietet aber einen Scanner und while-Schleife, bis es eine Übereinstimmung

import java.util.Scanner; 

public class GuessTheLetterGame { 

    public static void main(String[] args) throws java.io.IOException{ 
     Scanner keyboard = new Scanner(System.in); 
     char answer; 
     char guess; 
     boolean right = false; 

     while(!right){ 

      System.out.print("press a key and press ENTER:"); 
      answer= (char) keyboard.next().charAt(0); 

      System.out.print("Have a guess and press ENTER: "); 
      guess= (char) keyboard.next().charAt(0); 
      if (guess == answer){ 
       System.out.println("**Right**"); 
       right = true; 
      } 
     } 
    } 
} 
-1

In Ihrem Code gibt es keine Schleife zu raten zu halten ist. Es ist nur ein One-Shot-Deal. Um weiter raten zu können, müssen Sie einen Teil Ihres Codes wiederholen.

package bookExamples; 

public class GuessTheLetterGame { 

    public static void main(String[] args) throws java.io.IOException{ 
     char answer; 
     answer= 'A'; 
     char guess = '\0'; 

     Scanner scanner = new Scanner(System.in); 

     while(answer != guess) { 
      System.out.print("Have a guess and press ENTER: "); 
      guess = scanner.next().charAt(0); 

      System.out.println(guess); 
     } 

     System.out.println("**Right**"); 
} 

Wenn Sie erraten halten, bis die Antwort richtig ist, müssen Sie nicht mehr die if-Anweisung. Das einzige, was übrig bleibt, um die Formatierung korrekt zu halten, besteht darin, dem Benutzer ihre Schätzung anzuzeigen und eine neue Zeile zu beginnen.

HINWEIS: Der Code wurde geändert, um einen Scanner zu verwenden, und scanner.next(), um jeweils ein Zeichen zu erhalten.

+0

Der Aufruf von 'read()' bedeutet, dass Sie auch die Zeichen '\ r' (in Windows) und' \ n' lesen, die in den Stream eingefügt werden, wenn der Benutzer die Eingabetaste drückt. Ergebnis: Wenn Sie eine schlechte Antwort geben, wird die Meldung "Haben Sie eine Schätzung und drücken Sie ENTER:" mehrmals gedruckt. – Andreas

+0

Danke, ja, so kann ich weiter raten. Was ich jedoch wollte, ist nicht die "Antwort" zu beheben, sondern die erste Person kann drücken, was auch immer sie will. Wie kann ich das erreichen? – Magicbeanbuyer

+0

Aktualisiert, um Scanner zu verwenden. und korrigieren Sie die Aufforderung, die aktualisiert wird. –

1

Durch das Umwandeln von System.in.read() in char übergeben Sie ein Byte vom System an UTF-16. Daher funktioniert char c = (char) System.in.read(); nur für sehr begrenzte Eingaben.
Ich würde empfehlen, den Scanner zu verwenden, um eine ganze Zeile einzulesen.

String answer = "A"; 

Scanner scanner = new Scanner(System.in); 
String guess = ""; 

while(! answer.equalsIgnoreCase(guess)) 
{ 
    guess = scanner.nextLine(); 
} 

System.out.println("CONGRATULATIONS YOU WON!");