当前位置: 首页 > 知识库问答 >
问题:

如何重试/捕获输入不匹配异常而不被无限循环捕获

松波
2023-03-14

我试图从用户那里获取输入,为2D矿山的weeper游戏构建网格,当我将有效值传递给扫描器时,过程非常顺利,但当我尝试无效的东西时,它会经历无限循环,即使try块是用资源尝试,它应该用每一个新的尝试关闭扫描器,当它无限地打印捕获上的字符串时,它听起来不会关闭它

int gridSize = 0;
    System.out.println("how much do you want the grid's size");
    try (Scanner scanner = new Scanner(System.in)) {
        while (gridSize == 0) {
            gridSize = scanner.nextInt();
            scanner.next();
        }
    } catch (NoSuchElementException e) {
        System.out.println("try again");
    }

共有1个答案

薛滨海
2023-03-14

您捕获了错误的异常--如果输入不是int,则将抛出inputMismatchException。但是无论如何,使用hasnextint(),可以使这变得更容易:

try (Scanner scanner = new Scanner(System.in)) {
    while (!scanner.hasNextInt()) {
        System.err.println("Try again, this time with a proper int");
        scanner.next();
    }
    gridSize = scanner.nextInt();
} 
 类似资料: