问答详情
源自:7-1 简易扑克牌游戏

这段try catch语句问题出在哪?为什么会死循环不停输出 "请输入整数类型的id!"

while(true){
    try {
        id2 = console.nextInt();
    }catch (InputMismatchException ime){
        System.out.println("请输入整数类型的id!");
        continue;
    }
    break;
}

提问者:zjxjwxk 2018-02-22 14:29

个回答

  • 慕桂英2051007
    2019-11-18 18:01:12


    经过本人网上查询,发现原因如下:
    java.util.Scanner在获取下一个单词时,如果要求得到的输入跟实际的输入格式不匹配(例如要数字但实际输入不是数字),则会抛出InputMismatchException,并且输入流的内容不会被吞掉。
    java.util.Scanner的JavaDoc说得很清楚:
    When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.
    可以在代码的catch中添加一行:
    String token = console.next();
    即:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(true){
        try {
            id2 = console.nextInt();
        }catch (InputMismatchException ime){
            String token = console.next();  //添加此处代码!
            System.out.println("请输入整数类型的id!");
            continue;
        }
        break;
    }
    把Scanner里不要的内容吞掉,这样Scanner才会进一步读取后面的内容。

  • zjxjwxk
    2018-02-22 14:43:23

    经过本人网上查询,发现原因如下:

    java.util.Scanner在获取下一个单词时,如果要求得到的输入跟实际的输入格式不匹配(例如要数字但实际输入不是数字),则会抛出InputMismatchException,并且输入流的内容不会被吞掉。
    java.util.Scanner的JavaDoc说得很清楚:

    When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.

    可以在代码的catch中添加一行:

    String token = console.next();

    即:

    while(true){
        try {
            id2 = console.nextInt();
        }catch (InputMismatchException ime){
            String token = console.next();  //添加此处代码!
            System.out.println("请输入整数类型的id!");
            continue;
        }
        break;
    }

    把Scanner里不要的内容吞掉,这样Scanner才会进一步读取后面的内容。