我正在做作业,paycode 是让用户输入的变量之一。所以我将这个 paycode 声明为 int。那么,如果用户输入的不是整数,例如 a、b、c、d 或 1.5、2.5 等等,那又会怎样呢?我尝试了 if else 函数,但是当用户输入的不是整数时,它就会出错。当用户输入整数以外的支付码并让用户再次输入时,我也想让它循环。这就是我现在所拥有的,我无法让它循环。相反,它会变成无限循环。
int paycode;
boolean good = true;
do {
try {
System.out.printf("Key in the paycode of the worker according to the worker type: \n");
paycode = myscanner.nextInt();
if (paycode == 4 || paycode == 3 || paycode == 2 || paycode == 1) {
good = false;
}
else {
//user key in out of the range of pay code
System.out.printf("Paycode must be 1,2,3,4 \n");
}
}
catch(InputMismatchException e) {
System.out.printf("Paycode cannot have decimal places. \n");
System.out.printf("Key in the paycode of the worker according to the worker type: \n");
}
}
while (good);
最佳答案
当 myscanner
尝试获取下一个 int
但是输入无效,当抛出异常时,它将无效输入留在缓冲区中。您需要添加 myscanner.next();
在catch
block 以便刷新无效输入。所以,catch
block 将如下所示:
...
catch (InputMismatchException e) {
System.out.printf("Paycode cannot have decimal places. \n");
myscanner.next();
}
...
请注意,您不需要打印 System.out.printf("Key in the paycode of the worker according to the worker type: \n");
在catch
阻塞,因为这会使它在输入无效时打印两次。
顺便说一句,循环的语义有点困惑。我会设置 boolean good = false;
首先,然后将 while 条件设置为 while (!good);
.您还需要更改 good = true;
如果输入无效。这使得更容易理解程序循环的原因(而输入不好)。只是一个让您的代码更具可读性的小建议。
关于Java试图捕获非整数用户输入并使其循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125914/