我在运行这个java代码时不断遇到这个错误

问题描述 投票:0回答:1

我正在尝试制作一个可以进行加法、减法、乘法和除法的计算器程序,但是在执行 main 方法后我不断收到此错误


Exception in thread "main" java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1594)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
        at Java_Calculator.calculation(Java_Calculator.java:36)
        at Java_Calculator.main(Java_Calculator.java:19)
        at Java_Calculator.main(Java_Calculator.java:5)

这是我的代码供参考。

import java.util.Scanner;

public class Java_Calculator{
    public static void main(String[] args) {
        main();
        
    }
    static void main(){
        System.out.println("Welcome to Java Calculator!!");
        System.out.println("By-theclassicalguy");
        System.out.println("<------------------------------------------------------>");
        System.out.println("1. Perform a Calculation");
        System.out.println("2. Exit");
        System.out.println("Enter your choice (1/2):");
        Scanner input= new Scanner(System.in);
        int user_choice=input.nextInt();
        input.close();
        if (user_choice==1){
            calculation();

        }else{
            System.out.println("Thank you for using this program");

        }

    }

    static void calculation(){
        System.out.println("1. Add");
        System.out.println("2. Subtract");
        System.out.println("3. Multiply");
        System.out.println("4. Divide");
        Scanner calc_choice=new Scanner(System.in);
        System.out.println("Enter your choice (1/2/3/4):");
        
        int choice=calc_choice.nextInt();
        calc_choice.close();
        if (choice==1){
            add();
        } else if(choice==2){
            sub();

        }else if(choice==3){
            mult();
            
        }else if(choice==4){
            div();
            
        }


    }

    static void add(){
        Scanner num1= new Scanner(System.in);
        System.out.println("Enter a number:");
        double a=num1.nextDouble();
        num1.close();
        Scanner num2= new Scanner(System.in);
        System.out.println("Enter a second number");
        double b=num2.nextDouble();
        num2.close();
        double add=a+b;
        System.out.println("The sum is "+add);
        
    }

    static void sub(){
        Scanner num1= new Scanner(System.in);
        System.out.println("Enter a number:");
        double a=num1.nextDouble();
        num1.close();
        Scanner num2= new Scanner(System.in);
        System.out.println("Enter a seconf number:");
        double b=num2.nextDouble();
        num2.close();
        double sub=a-b;
        System.out.println("The difference is "+sub);
    }
    static void mult(){
        Scanner num1= new Scanner(System.in);
        System.out.println("Enter a number:");
        double a=num1.nextDouble();
        num1.close();
        Scanner num2= new Scanner(System.in);
        System.out.println("Enter a second number:");
        double b=num2.nextDouble();
        num2.close();
        double mult=a*b;
        System.out.println("The sum is "+mult);
    }
    static void div(){
        Scanner num1= new Scanner(System.in);
        System.out.println("Enter numerator:");
        double a=num1.nextDouble();
        num1.close();
        Scanner num2= new Scanner(System.in);
        System.out.println("Enter a denominator");
        double b=num2.nextDouble();
        num2.close();
        double div=a/b;
        System.out.println("The sum is "+div);
    }

    



}

基本上,我想做的是创建多个方法,每个方法都有其特定的功能,如加法、减法等,并且这些函数将链接到另一个计算方法,该计算方法又链接到另一个名为 main 的方法。在每个方法中,我添加了一个扫描仪类来收集用户的数字。但我不断收到上面提到的错误,当我运行程序时,主要方法运行正常,然后当我输入 1 继续计算方法时,该方法也打印所需的内容,但之后而不是扫描仪类工作并询问我要回答,它会打印错误并退出程序。

java java.util.scanner calculation
1个回答
0
投票

您遇到的错误是由于您使用 Scanner 对象并随后关闭它的方式造成的。当您关闭附加到 System.in 的 Scanner 对象时,实际上就是关闭底层输入流 (System.in)。一旦关闭该流,您就无法使用其他扫描仪或任何其他方法再次读取它。

要解决此问题,您应该对所有输入使用单个 Scanner 对象,并避免关闭它,直到程序完全完成用户输入。

© www.soinside.com 2019 - 2024. All rights reserved.