2009-07-12 14 views
-1

Wie mache ich das, wenn der Benutzer eine Zahl eingibt und die Eingabetaste (oder etwas) drückt, werden die ifelse Anweisungen ausgeführt?Nummer Ratespiel - wie man es repariert?

public static void main(String[] args) { 

    System.out.println("please guess the number between 1 and 100."); 

    boolean run = true; 
    int y = 0; 

    Random ran = new Random(); 
    int x = ran.nextInt(99); 

    while (run == true) { 

     Scanner scan = new Scanner(System.in).useDelimiter(" "); 
     // System.out.println(scan.nextInt()); 

     y = scan.nextInt(); 

     /* 
     * if(y > 0){ run = false; } else{ run = true; } 
     */ 
     if (y > x) { 
      System.out.println("Lower..."); 
     } else if (y < x) { 
      System.out.println("Higher..."); 
     } else if (y == x) { 
      System.out.println("Correct!"); 
      try { 
       Thread.currentThread().sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 

       System.exit(0); 
      } 
     } 
    } 
} 
+0

Was meinen Sie mit "Ausführen der if-else-Anweisungen"? Sprechen Sie über diejenigen, die auskommentiert sind? – jjnguy

+0

Sie sollten 'Thread.sleep (...)' anstelle von 'Thread.currentThread(). Sleep (...)' verwenden, da es sich um eine statische Methode handelt. Ihr Code könnte Sie dazu verleiten, 'someOtherThread.sleep (...)' zu machen, das nicht 'someOtherThread' schläft. – newacct

Antwort

3

Ihr Code funktioniert so wie er ist. Es ist nur so, dass Ihre Eingabe durch Leerzeichen begrenzt sein muss.

Wenn Sie eine einzelne Zahl eingeben und die Eingabetaste drücken, wird kein Leerzeichen angezeigt, und da Sie Scanner als durch Leerzeichen begrenzt festgelegt haben, wird nichts gefunden. Auf der anderen Seite, wenn Sie Eingabe:

3 9 

(3 [Leerzeichen] 9), Ihr Scanner die 3. abholen Was Sie wahrscheinlich wollen, ist dies:

Scanner scan = new Scanner(System.in).useDelimiter("\n"); 

, so dass Ihre Scanner liest eine Zahl, nachdem Sie Enter gedrückt haben. Egal, wie Sie dies tun, wollen Sie einige Fehlerbehandlung um die Scanner setzen, um InputMismatchException s zu behandeln.

+0

danke für die Antwort! Ich vergesse, dass \ n ist, also habe ich gerade gedrückt in das Trennzeichen gedrückt und es bekam nur die erste Ziffer, also versuchte ich, die ganze # durch viel kompliziertere Methoden zu erhalten! Danke für die Antwort, die meine Probleme vollständig gelöst hat! –

0

Ich glaube, Ihre Frage ist nicht ganz klar, die folgenden Änderungen logisch erscheinen, angesichts der Struktur des Codes:

  else if (y == x) { 
        System.out.println("Correct!"); 
        run = false; 
      } 

und natürlich nur if(run) (eine Frage des guten Stils)

0

Ihre Code tatsächlich keine Zahlen zwischen 1 und 100 inklusive (eher zwischen 0 und 98 inklusive). Wenn Sie diesen Fehler beheben und eine Fehlerüberprüfung hinzufügen, wird Ihr Code zu:

import java.util.*; 

public class HiLo { 
    public static void main(String[] args) { 
    int guess = 0, number = new Random().nextInt(100) + 1; 
    Scanner scan = new Scanner(System.in); 

    System.out.println("Please guess the number between 1 and 100."); 

    while (guess != number) { 
     try { 
     if ((guess = Integer.parseInt(scan.nextLine())) != number) { 
      System.out.println(guess < number ? "Higher..." : "Lower..."); 
     } 
     else { 
      System.out.println("Correct!"); 
     } 
     } 
     catch (NumberFormatException e) { 
     System.out.println("Please enter a valid number!"); 
     } 
     catch (NoSuchElementException e) { 
     break; // EOF 
     } 
    } 

    try { 
     Thread.currentThread().sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
Verwandte Themen