我正在尝试制作一个可以进行加法、减法、乘法和除法的计算器程序,但是在执行 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 继续计算方法时,该方法也打印所需的内容,但之后而不是扫描仪类工作并询问我要回答,它会打印错误并退出程序。
您遇到的错误是由于您使用 Scanner 对象并随后关闭它的方式造成的。当您关闭附加到 System.in 的 Scanner 对象时,实际上就是关闭底层输入流 (System.in)。一旦关闭该流,您就无法使用其他扫描仪或任何其他方法再次读取它。
要解决此问题,您应该对所有输入使用单个 Scanner 对象,并避免关闭它,直到程序完全完成用户输入。