编写简易计算器时的报错

编写简易计算器时的报错

问题描述:

public class HomeworkDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String str = "";
        double i = 0;
        double j = 0;
        double result = 0;
        while (scanner.hasNextDouble()) {
            i = scanner.nextDouble();
            break;
        }
        while (scanner.hasNextLine()) {
            str = scanner.nextLine();
            switch (str) {
                case "+":
                    j = scanner.nextDouble();
                    result = add(i, j);
                    i = result;
                    System.out.println(result);
                    break;
                case "-":
                    j = scanner.nextDouble();
                    result = minus(i, j);
                    i = result;
                    System.out.println(result);
                    break;
                case "*":
                    j = scanner.nextDouble();
                    result = multiply(i, j);
                    i = result;
                    System.out.println(result);
                    break;
                case "/":
                    j = scanner.nextDouble();
                    result = divide(i, j);
                    i = result;
                    System.out.println(result);
                    break;
            }if (str.equals("quit")){
                System.out.println("退出计算机");
                break;
            }

            scanner.close();
        }
    }//加
    public static double add ( double a , double b){
        return a + b;
    }//减
    public static double minus ( double a , double b){
        return a - b;
    }//乘
    public static double multiply ( double a , double b){
        return a * b;
    }//除
    public static double divide ( double a , double b){
        return a / b;
    }


}

输出9-1就报错了,求教一下是哪里出了问题?

Exception in thread "main" java.lang.IllegalStateException: Scanner closed
    at java.util.Scanner.ensureOpen(Scanner.java:1070)
    at java.util.Scanner.findWithinHorizon(Scanner.java:1670)
    at java.util.Scanner.hasNextLine(Scanner.java:1500)
    at com.sean.base.method.HomeworkDemo.main(HomeworkDemo.java:25)

Process finished with exit code 1

>Exception in thread "main" java.lang.IllegalStateException: Scanner closed

你在这个循环里就关闭了scanner, 循环体执行第二次时,sanner就已经不能用了。

while (scanner.hasNextLine()) {
  ...

  scanner.close()

}

你觉的呢?