2016-11-17 2 views
-2
import java.util.*; 

public class NGG { 
    static Scanner numberEntered; 
    static Scanner userInput = new Scanner(System.in); 
    static int guessedNumber; 
    static int randomNumber = (int) (Math.random()* 11); 
    static Scanner reply; 
    static String answer; 

    public static void main(String[] args) { 
     guessChecker(guessedNumber); 
    } 

    public static void guessChecker(int userGuess) { 
     while (userGuess != randomNumber) { 
      intro(); 
      userGuess = intChecker(); 
      if (userGuess == randomNumber) { 
       System.out.println("Congradulations!"); 
      System.exit(0);      
      } else { 
       System.out.println("That was Incorrect!"); 
       delay(1000); 
       retryChecker(reply, answer); 
      } 
     } 
    } 

    public static int intChecker() { 
     try { 
      return userInput.nextInt(); 
     } catch (InputMismatchException e) { 
      userInput.next();  
      System.out.println("Your answer was Invalid!"); 
      delay(2000); 
      retryChecker(reply, answer); 
      return 0; 
     } 
    } 

    public static void retryChecker(Scanner userReply, String userChoice) { 
     System.out.println("Would you like to try again?"); 
     userReply = new Scanner(System.in); 
     userChoice = userReply.nextLine(); 
     if (userChoice.equalsIgnoreCase("yes") || userChoice.equalsIgnoreCase("y")) { 
      guessChecker(guessedNumber);  
     } else { 
      System.exit(0); 
     } 
    } 

    public static void intro() { 
     System.out.println("I'm thinking of a number in my head..."); 
     delay(1000); 
     System.out.print("Try to guess it: "); 
    } 

    public static void delay(int millis) { 
     try { 
      Thread.sleep(millis); 
     } catch (InterruptedException e) {} 
    }  
} 

und hier ist mein Problem:inputmismatch Ausnahme

enter image description here

ich eine Reihe Ratespiel, sagt jedes Mal, es „versuchen, es zu erraten:“ es wird in der Regel können Sie in einer Vermutung geben Wenn Sie nicht vorher eine Zeichenfolge, einen Buchstaben oder eine Zahl gefolgt von einem Leerzeichen gefolgt von einer anderen Zeichenkette, einem Buchstaben oder einer Zahl gewählt haben, wird Ihre Antwort einfach "Sie haben eine ungültige Antwort" ausgegeben das Programm.

Wie würde ich das beheben? so dass der userInput auch eine Zeichenfolge, ein Buchstabe oder eine Zahl sein kann, gefolgt von einem Leerzeichen und dann einer anderen Zeichenfolge, einem Buchstaben oder einer Zahl, und es wird normal mit dem Programm verschoben.

+0

können Sie genauer –

+0

Nun ^^ Das ist das Problem, aber 'static int guessedNumber', setzt 'guessedNumber' auf 0, und Sie aktualisieren diese Variable nie. –

+0

können Sie mir zeigen, wie ich es in meinem Code beheben kann. Dies ist mein erstes Mal, ein Java-Programm zu machen und alles ist sehr verwirrend für mich –

Antwort

0

Das Problem ist in der intChecker().

public static int intChecker() { 
     try { 
      return userInput.nextInt(); 
     } catch (InputMismatchException e) { 
      userInput.nextLine(); // -> changed from .next() to nextLine()  
      System.out.println("Your answer was Invalid!"); 
      delay(2000); 
      retryChecker(reply, answer); 
      return 0; 
     } 
    } 

Der Grund dafür ist, wenn Sie next() verwenden es String zurückgibt, wenn es Raum oder EOF trifft. Wenn Sie it's me! eingeben, überprüft zuerst it's und sagt, dass es falsch ist. Es fragt, ob als nächstes fortzufahren oder nicht. Wenn Sie y drücken, um zur Methode zu wechseln, wird die verbleibende Zeichenfolge me! gelesen.

Hier haben Sie verschiedene Scanner userInput und verwendet. Da userInput statisch ist, stirbt das Objekt nicht und hat die verbleibende Zeichenfolge, die me! nach der Rückgabe its ist.

So gibt nextLine() die gesamte Zeichenfolge zurück.

Weitere Informationen darüber, wie sie beide arbeiten, überprüfen Sie meine anderen answer

Ich hoffe, es half.

+0

@ZaidA Ich kann nicht sagen, was mit deinem Code nicht stimmt, wenn du sagst, dass du es nicht bekommen hast. Sie sollten speziell erzählen. P.S. Auf meinem PC läuft alles fehlerfrei. Wenn es '' '' 'nicht finden kann, müssen Sie eine neue Variable verwenden, ohne sie zu deklarieren. – SkrewEverything