循环时代码不退出(试图捕获异常)

时间:2015-04-23 06:41:33

标签: java exception-handling do-while

在尝试学习try / catch异常处理时,我编写了非常简单的代码(n1 / n2 = sum)。

我有一个do / while循环,当成功运行时,它应该使x = 2。如果不是,则x = 1,其中可以再次输入用户输入。

代码编译并运行但是如果我尝试,例如n1 = 10,n2 = stackoverflow,来自捕获的异常的prinln将永远运行!

为什么循环卡住?

提前致谢

import java.util.*;

public class ExceptionHandlingMain {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        int x = 1; // x originally set to 1
        do { // start of do loop
            try {
                System.out.println("Enter numerator: ");
                int n1 = input.nextInt();

                System.out.println("Enter divisor");
                int n2 = input.nextInt();

                int sum = n1 / n2;

                System.out.println(n1 + " divided by " + n2 + " = " + sum);
                x = 2; 
// when the code is completed successfully, x = 2 and do / while loop exits

            } catch (Exception e) {
                System.out.println("You made a mistake, moron!");
            }
        } while (x == 1); 
    }
}

3 个答案:

答案 0 :(得分:2)

input.nextLine()块中添加catch以清除读取的行。

答案 1 :(得分:1)

那是因为你按回车键输入号码。

我建议您添加input.nextLine();调用,因此在从Scanner读取输入后也会使用返回键。

使用nextInt api时,键入的内容如下:

 123<return key>

nextInt只会将123作为字符串选中并将其转换为数字并保留返回键部分。

答案 2 :(得分:0)

谢谢@barak manos(以及其他回复的人)

添加

input.nextLine(); 

后立即

System.out.println("You made a mistake, moron!");

清除输入流并允许用户输入新数据。

举: 答案改编自https://stackoverflow.com/a/24414457/4440127 用户:user3580294