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

标签 java

我正在做作业,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/

相关文章:

java - Amazon S3 上传 NoHttpResponseException

java - weka:如何从测试单个实例中获取类名

java - InetAddress.getLocalHost().getHostAddress() 正在返回 127.0.1.1

Java为什么要用对象来实例化一个类?

java - 如何从输入中读取并报告两个字符串在完全相同的位置是否具有完全相同的 'tokens' ?

java - Java/shell 中的 Base64 编码输出不同

java - 获取使用 ProcessBuilder 启动的进程的内存使用情况和执行时间

Java NIO 与非 NIO 性能对比

java - 无法打开以感叹号 (!) 结尾的目录中的资源

java - GWT警告: "Call to Enum method toString when enum obfuscation is enabled"