0

我正在尝试读取开关盒选项的数字,但我遇到了一个例外。我将尝试在代码中更好地解释问题:

do{
    try{
        loop=false;
        int op=teclado.nextInt();
        //I tryed a teclado.nextLine() here cause i saw in other Q but didn't work
    }
    catch(InputMismatchException ex){
        System.out.println("Invalid character. Try again.");
        loop=true;//At the catch bolck i change the loop value
    }
}while(loop);//When loop is true it instantly go to the catch part over and over again and never ask for an int again

当我输入一个 int 时,它工作得很好,但异常使它重新开始。第二次,程序不要求 int (我认为它可能是一个缓冲区,我需要类似fflush(stdin)C 的东西),缓冲区开始疯狂地写入。

4

1 回答 1

1

如果你失败了,你会很好地Scanner从内部创建一个新的实例catch来获取输入。 编辑:当你失败时, 你可以使用 aScanner.nextLine()来超越换行符。循环可能不适合这样do...while做,因为它保证它将至少执行一次。

一个可以帮助您更多的构造是一个简单的while循环。这实际上是while-true-break一种循环,会在有效输入时中断。

while(true) {
    try {
        op=teclado.nextInt();
        break;
    } catch(InputMismatchException ex){
        System.out.println("Invalid character. Try again.");
        teclado.nextLine();
    }
}
于 2012-04-28T05:09:21.593 回答