inputmismatch异常

时间:2016-11-17 20:00:37

标签: java

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) {}
    }    
}

这是我的问题:

enter image description here

我有一个数字猜谜游戏,每次它说"尝试猜测它:" 它通常会让你输入一个猜测,除非你之前的猜测是一个字符串,字母或数字,然后是一个空格,然后是另一个字符串,字母或数字,然后不是让你自己写的猜测它只会打印输出& #34;你的答案是无效的"并继续该计划。

我该如何解决这个问题?这样userInput也可以是一个字符串,字母或数字,后跟一个空格,然后是另一个字符串,字母或数字,它会正常地移动一个。

1 个答案:

答案 0 :(得分:0)

问题出在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;
        }
    }

原因是当你使用next()时,它会在遇到空格或EOF时返回字符串。

因此,当您输入it's me!时,首先检查it's并说明错了。它询问是否继续下一步。当您按y转到该方法并读取剩余的字符串me!时。

您在此处使用了不同的扫描程序userInputuserReply。由于userInput是静态的,因此在返回me!后,对象不会死亡并且其中的剩余字符串为its

因此使用nextLine()将返回整个字符串。

有关它们如何工作的详细信息,请查看我的其他answer

我希望它有所帮助。