【发布时间】:2018-10-20 10:24:15
【问题描述】:
我正在尝试从用户那里获取输入来为 2d 地雷的哭泣游戏构建网格, 当我将有效值传递给扫描仪时,该过程非常顺利,但是当我尝试无效的事情时,它会经历无限循环,即使尝试块尝试使用资源,每次新的尝试都应该关闭扫描仪,听起来它没有当它无限打印捕获的字符串时关闭它
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");
}
【问题讨论】:
-
你永远不需要捕捉
NoSuchElementException,因为你应该在调用nextInt()之前使用scanner.hasNextInt()来检查令牌。 -
当下一个令牌不是
int令牌时,您需要通过调用next()或nextLine()来丢弃该令牌。 -
使用资源的尝试不应该关闭它吗?
-
我指的是
catch (NoSuchElementException e),而不是 try-with-resources 部分。但要回答这个问题,一般来说,不,您不应该关闭包装System.in的Scanner,因为关闭System.in不是您的责任,关闭它通常会导致错误。 -
如何使用
Scanner#hasNextInt来检查输入是否是您期望的格式?
标签: java exception java.util.scanner