在While循环中尝试捕捉

时间:2014-07-21 02:50:11

标签: java exception-handling while-loop try-catch inputmismatchexception

下面的代码询问用户他/她想要多少赛车手。

while (true) { // loops forever until break
    try { // checks code for exceptions
        System.out.println("How many racers should" + " participate in the race?");
        amountRacers = in.nextInt();
        break; // if no exceptions breaks out of loop
    } 
    catch (InputMismatchException e) { // if an exception appears prints message below
        System.err.println("Please enter a number! " + e.getMessage());
        continue; // continues to loop if exception is found
    }
}

如果在amoutnRacers = in.nextInt();输入一个数字,则代码会中断循环,其余程序运行正常;但是,当我输入诸如" awredsf"它应该捕捉到它的异常。而不是再次提示用户它不断循环,这对我来说没有意义。

程序在连续循环时打印如下:

有多少参赛者参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少赛车手参加比赛?请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 ...

我不明白amountRacers = in.nextInt();发生了什么,为什么用户无法输入号码?

3 个答案:

答案 0 :(得分:7)

捕获InputMismatchException后,只需添加input.next()即可。

catch (InputMismatchException e) { //if an exception appears prints message below
    System.err.println("Please enter a number! " + e.getMessage());
    input.next(); // clear scanner wrong input
    continue; // continues to loop if exception is found
}

您需要清除错误的输入,而扫描仪自动不会。

答案 1 :(得分:0)

您可能需要创建一个Scanner类,以获取从键盘流式传输的标准输入。您应该在代码中的某处创建一个语句,该语句创建一个Scanner类的实例,如:Scanner in = new Scanner(System.in); 所以" in"声明中的变量:amountRacers = in.nextInt();等待并扫描键盘输入的输入并存储它。

答案 2 :(得分:0)

今天我解决了这个问题:-)这是我的代码。我想我帮助

public int choice () throws Exception{
    Scanner read = new Scanner(System.in));
    System.out.println("Choose the option from the upper list");
    int auxiliaryChoiceMenu = 5;
    int auxiliaryVariable = -1;
    boolean auxiliaryBoolean = false;
    while (!auxiliaryBoolean) {
        try {
            auxiliaryVariable = read.nextInt();
            read.nextLine();
        } catch (Exception e) {
            System.out.println("incorrect data, try again"+e);
            read.nextLine();
            continue;
        }

        if (auxiliaryVariable<0 || auxiliaryVariable>auxiliaryChoiceMenu){
            System.out.println("incorrect data, try again");
        } else {
            auxiliaryBoolean = true;
        }
        choiceMenu = auxiliaryVariable;

    }
        return choiceMenu;
        //choicemenu is a external variable
}