我不确定为什么输入整数以外的任何内容时,输出未显示Invalid Format!
。
这是我要实现的异常处理。另外,如何在Scanner
子句中关闭finally
而不引起无限循环。
class ConsoleInput {
public static int getValidatedInteger(int i, int j) {
Scanner scr = new Scanner(System.in);
int numInt = 0;
while (numInt < i || numInt > j) {
try {
System.out.print("Please input an integer between 4 and 19 inclusive: ");
numInt = scr.nextInt();
if (numInt < i || numInt > j) {
throw new Exception("Invalid Range!");
} else {
throw new InputMismatchException("Invalid Format!");
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
scr.next();
}
}
scr.close();
return numInt;
}
这是我想要获得的输出:
答案 0 :(得分:1)
如果您输入的不是int,则错误将被抛出:
numInt = scr.nextInt();
然后被赶上catch块,从而跳过打印语句。您需要检查是否存在下一个int:
if(!scr.hasNextInt()) {
throw new InputMismatchException("Invalid Format!");
}
此外,如何在finally子句中关闭扫描程序而又不会导致无限循环。
您无需在finally块中关闭Scanner
。实际上,您根本不应该关闭它。关闭System.in
是错误的做法。通常,如果您没有打开资源,则不应关闭它。
答案 1 :(得分:0)
您需要在Exception catch块之前的另一个catch块中捕获InputMismatchException并添加scr.next();。如下所示:
public static int getValidatedInteger(int i, int j) {
Scanner scr = new Scanner(System.in);
int numInt = 0;
while (numInt < i || numInt > j) {
try {
System.out.print("Please input an integer between 4 and 19 inclusive: ");
numInt = scr.nextInt();
if (numInt < i || numInt > j) {
throw new Exception("Invalid Range!");
}
} catch (InputMismatchException ex) {
System.out.println("Invalid Format!");
scr.next();
} catch (Exception ex) {
System.out.println(ex.getMessage());
scr.next();
}
}
scr.close();
return numInt;
}
答案 2 :(得分:-1)
下面的代码将为您工作,这是您可以用来获取期望输出的另一种方法。 在这段代码中,我处理了catch块中的InputMismatch。
MyProject