我正在完成我的任务,而paycode是允许用户键入的变量之一。所以这个paycode我把它声明为int。那么如果用户输入除整数之外的其他内容,例如a,b,c,d或1.5,2.5等等。我尝试if else函数但是当用户输入而不是整数时,它会出错。当用户键入除整数之外的paycode并让用户再次键入时,我也想让它循环。这就是我现在所拥有的,我不能让它循环。相反,它将变成无限循环。
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);
答案 0 :(得分:3)
当myscanner
尝试获取下一个int
但输入无效时,它会在抛出异常时将无效输入留在缓冲区中。您需要在myscanner.next();
块中添加catch
,以便刷新无效输入。因此,catch
块将如下所示:
...
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;
。这使得更容易理解程序循环的原因(输入不好)。只是一个小建议,使您的代码更具可读性。