2016-03-22 15 views
1

Ich habe eine Java-Zuweisung und kann es nicht zum Laufen bringen.Ratespiel für Java

Ich mache ein Ratespiel zwischen 1-100. Wenn ich meinen Code ausführe, sagt er mir immer "zu niedrig", ob es richtig oder zu hoch ist.

Hier ist mein Code:

public static void main(String[] args) throws java.io.IOException { 

    int i, ignore, answer = 64; 

    do { 
     System.out.println("I'm thinking of a number between 1 and 100."); 
     System.out.println("Can you guess it?"); 

     i = (int) System.in.read(); 

     do { 
      ignore = (int) System.in.read(); 
     } while (ignore != '\n'); 

     if (i == answer) System.out.println("**RIGHT**"); 
     else { 
      System.out.print("...Sorry, you're "); 

      if (i < answer) 
       System.out.println("too low"); 
      else 
       System.out.println("too high"); 
      System.out.println("Try again!\n"); 
     } 
    } while(answer != i); 
} 
+2

Denn mit dem Aufruf von 'System.in.read()', Sie sind ein 'char' bekommen. Sie sollten einen 'Scanner' konstruieren und' nextInt() 'wie folgt aufrufen:' Scanner scan = new Scanner (System.in); i = scan.nextInt(); ' – Majora320

+1

' System.in.read() 'nimmt das nächste ** Byte ** nicht das nächste ** int **. Es gibt einen großen Unterschied –

+1

Sie sollten den Debugger verwenden oder einfach nur die Variable ausgeben, um zu sehen, was Ihr Code tatsächlich tut, bevor Sie ohne Test fragen. Wenn Sie dies getan haben, schreiben Sie sie in die Frage. – Nier

Antwort

1

Da System.in.read() kehrt ein char Objekt, das die Zeichen, die eingegeben wurde. Wenn Sie es in eine int umwandeln, wird anstelle der tatsächlich eingegebenen Ganzzahl ein char Objekt zurückgegeben, das einen völlig anderen Wert hat. Um dieses Problem zu lösen, sollten Sie die Scanner Klasse verwenden, die über eine nextInt() Methode verfügt, die perfekt dafür ist Es wird eine InputMismatchException auf ungültige Eingabe werfen, also wenn Sie Fehlerbehandlung wollen, sollten Sie das fangen.

ist hier ein Arbeits (und leicht gereinigt) Version des Codes:

import java.util.Scanner; 
import java.util.InputMismatchException; 

public class Guess { 
    public static void main(String[] args) { // No need to throw IOException 
     int input = -1, answer = 64; // Initialize input for if the user types 
            // in invalid input on the first loop 

     Scanner scan = new Scanner(System.in); 

     do { 
      System.out.println("I'm thinking of a number between 1 and 100."); 
      System.out.println("Can you guess it?"); 

      try { 
       input = scan.nextInt(); 
      } catch (InputMismatchException ex) { 
       System.out.println("Invalid Input!"); 
       continue; // Skips to the next loop iteration if invalid input 
      } 

      if (input == answer) 
       System.out.println("**RIGHT**"); 
      else { 
       System.out.println("...Sorry, you're too " + (input < answer ? "low" : "high")); 
       //^Ternary operator; you may not have learned this yet, but it 
       // just does a conditional return (if the value before the '?' is 
       // true, then return the value before the ':'; else return the 
       // value after.) 
       System.out.println("Try again!"); 
      } 
     } while (answer != input); 
    } 
} 
+0

Das hat super funktioniert. Vielen Dank für deine Hilfe. Ich wusste nicht, System.in.read() würde int nicht zurückgeben. Das Beispiel, aus dem ich ging, benutzte Buchstaben anstelle von Zahlen. Ich habe versucht, diesen Code zu ändern. Macht jetzt Sinn! – Magdalina08

+0

Gern geschehen! :3 – Majora320