Catch异常(char到int)导致循环无限

时间:2017-04-23 03:59:16

标签: java exception-handling

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的值。

1 个答案:

答案 0 :(得分:3)

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

真正的问题是由捕获异常之前发生的事情引起的。如果nextInt()无法解析整数,则会放回它所查看的所有字符。

所以...当它再次绕过循环时,你的代码试图读取与以前完全相同的字符。那会失败,失败,失败......

解决方案:在要求用户再次尝试之前,使用nextLine()跳过“错误输入”。你可以将它放在异常的catch块中。

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

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

您不应使用==来测试布尔值是真还是假。这样做:

  .... while (!nvalid);