While 循环不适用于 Try/Catch 语句

While loop that is not working with Try/Catch statements

我试图让用户有机会在引入产生错误但无法正常工作的内容后重复输入,因为一旦 err 被捕获,尝试的东西就是不再执行,而是直接进入 catch 生成一个永恒的 cicle。这是我的代码:

while (err==1){
    err=0;
    try{
        dim = keyboard.nextInt();
    } catch(Exception e){
        System.out.println("Oops! What you entered is not an integer.");
        err=1;
    }
}

当您输入非整数时,ScannernextInt() 的调用不会消耗该非整数。您需要调用 keyboard.next()(或 keyboard.nextLine())来使用它。像,

try {
    dim = keyboard.nextInt();
} catch (Exception e) {
    System.out.printf("%s is not an integer.%n", keyboard.next());
    err = 1;
}

问题在于 input.nextInt() 命令它只读取 int 值。如果您通过 Scanner#nextLine 读取输入并使用 Integer#parseInt(String) 方法将输入转换为整数,那就更好了。

这对我有用。

 public static void main(String[] args) {
    int err = 1;
    Scanner keyboard = new Scanner(System.in);
    while (err == 1) {
        err = 0;
        try {
            int dim = Integer.parseInt(keyboard.nextLine());
            System.out.println("done.. exit");
        } catch (Exception e) {
            System.out.println("Ups! What you entered is not an integer.");
            err = 1;
        }
    }
}

输出

dd
Ups! What you entered is not an integer.
23
done.. exit

next()只能读取输入到space。它无法读取由 space 分隔的两个单词。此外,next() 在读取输入后将光标置于同一行。

nextLine() 读取包含单词之间 space 的输入(即读取到行尾 \n)。读取输入后,nextLine() 将光标定位在下一行。

要阅读整行,您可以使用 nextLine()

您不是 clearing/flushing 每次用户输入后的扫描仪缓冲区。

  • 在 while 循环结束之前(在 catch 块之后)使用 keyboard.nextLine()

  • 在 while 循环本身内声明扫描器对象 Scanner keyboard = new Scanner(System.in);

this

干杯!