Java试图捕获不是整数用户输入并使其循环

时间:2015-12-07 03:22:12

标签: java

我正在完成我的任务,而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);

1 个答案:

答案 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;。这使得更容易理解程序循环的原因(输入好)。只是一个小建议,使您的代码更具可读性。