输入字符时Java try-catch无限循环

时间:2015-12-04 08:01:56

标签: java

我想制作一个只接受1-5或9输入的try-catch异常。所以我写了下面的代码。

    try {
            step1 = scanner.nextInt();
        } catch (Exception ex) {
            System.out.println("Error! Input accept integers only. Input 1-5 or 9");
            System.out.println("");
            continue;
        }

结果是,如果我输入的数字无效,则会给我一个错误(那是真的)。但是当我输入一个角色时,它给了我一个无限循环。我该如何解决这个问题呢?

3 个答案:

答案 0 :(得分:0)

也许你必须在决策之前解析输入。 抱歉我的英语不好,我也不是母语人士。

答案 1 :(得分:0)

因为我不知道你的循环看起来如何,我将在答案中无限循环。在正常情况下,nextInt方法不会捕获回车符,如果您输入的内容不是数字,则需要调用nextLine来捕获它。如果你不这样做,如果你使用任何一种只需要nextInt的循环,你可能会遇到无限循环。这可以解决问题:

while(true) {
    int step1;
    try {
        step1 = s.nextInt();
    } catch (InputMismatchException e) {
        System.out.println("Error! Input accept integers only. Input 1-5 or 9");
        System.out.println("");
    } finally { // Use a finally block to catch the carriage return, no matter if the int that got input was valid or not.
        s.nextLine();
    }
}

答案 2 :(得分:0)

试试这个,进行所有测试

int step1;

while (true)
{
Scanner scanner = new Scanner(System.in);

 try {
     step1 = scanner.nextInt();

     if (((step1>=1) && (step1<=5)) || (step1==9))
            // BINGO
            break;       
 }
 catch (Exception ex) 
    {
    }

 System.out.println("Error! Input accept integers only. Input 1-5 or 9");
 System.out.println("");
 // it loops ther
}   

System.out.println("You are done ! "+step1);