我如何在处理异常的同时接受输入?

How do I take input along with handling exceptions?

我想从用户那里获取一个整数输入。我正在使用 try-catch 异常,因此如果输入不是 int,它会要求用户输入另一个输入。我写了下面的代码:

   while (flag==true) {       
        try {    

            System.out.println("Enter the encryption key!");
            k = input.nextInt();
            flag = false;
        }
        catch (InputMismatchException ex) {
            System.out.println("Please enter integer value!(");


        } 
    }

但是当出现异常时循环继续打印

"Enter the encryption key!"
"Please enter integer value!"

无限,因为扫描仪输入不会等待另一个输入。

我该如何解决这个问题?

您应该在 catch 子句中调用 next,这将解决问题。

docs - Scanner

When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.

如果 catch 子句中没有 nextinput.nextInt(); 将继续读取相同的标记,添加 next 将消耗该标记。

您可以尝试使用

input.nextLine()

因为它会一直等到您按回车键。但是如果我没记错的话,你需要把它解析成一个整数。

你应该采纳 Maroun Maroun 的建议,对我来说看起来更干净

另一种方法是重新初始化循环中的Scanner

boolean flag = false;
        while (!flag) {       
            try {    
                input = new Scanner(System.in);//Initialize it here
                //....