捕获异常(char to int)导致循环无限


import java.util.InputMismatchException;  import java.util.Scanner;
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean nvalid = true; // boolean to get out of do while when user input number
        int a = 0;
        System.out.println("enter number a");
        do {
            try {
                a = sc.nextInt();
                nvalid = true;
            } catch (InputMismatchException e) {
                System.out.println("please enter number only");
                nvalid = false; //make the boolean false so do while will let user enter number again.
            }
        } while (nvalid == false);
        System.out.println("out of do while");
    }

嗨,我正在使用Netbeans练习Java例外,当用户未输入号码时,我想捕获异常。

上面的代码导致无限循环,并防止用户输入可变 a的值。

您成功地捕获了异常。那不是问题。

真正的问题是由之前发生的引起的。如果nextInt()无法解析整数,则将其查看的所有字符放回。

so ...当它再次绕循环时,您的代码正在尝试与以前的字符完全相同。那会失败,失败,失败...

解决方案:在要求用户重试之前,请使用nextLine()跳过"不良输入"。您可以将其放在例外的捕获块中。


请注意,这是一个坏主意/坏习惯:

  .... while (nvalid == false);

您不应使用 ==来测试布尔值是对还是错。而是这样做:

  .... while (!nvalid);

最新更新