获取线程“main”java.util.NoSuchElementException中的错误异常
NoSuchElementException是一个RuntimeException,可以由java中的不同类引发,如迭代器、枚举器、扫描程序或StringTokenizer 如果底层数据结构没有任何元素,则所有这些类都有方法获取下一个元素或下一个标记,Java抛出Java.util.NoSuchElementException 在hashmap上迭代而不检查是否有任何元素的最常见示例,这就是为什么建议在调用迭代器上的next之前使用hashNext 在for循环外部初始化扫描仪获取线程“main”java.util.NoSuchElementException中的错误异常,java,multithreading,exception,Java,Multithreading,Exception,NoSuchElementException是一个RuntimeException,可以由java中的不同类引发,如迭代器、枚举器、扫描程序或StringTokenizer 如果底层数据结构没有任何元素,则所有这些类都有方法获取下一个元素或下一个标记,Java抛出Java.util.NoSuchElementException 在hashmap上迭代而不检查是否有任何元素的最常见示例,这就是为什么建议在调用迭代器上的next之前使用hashNext 在for循环外部初始化扫描仪 import j
import java.util.Scanner;
/**
* @author SUBHA FAIRUZ
*
*/
public class calculation {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
for( i=0; i<=4;i++) {
System.out.println("1.ADDITION\n2.SUBTRACTION\n3.MULTIPLICATION\n4.DIVISION\n5.EXIT");
System.out.print("Choose Your Operator:");
Scanner input = new Scanner(System.in);
int option= input.nextInt();
if(option==5)
System.exit(0);
while(option>=6 || option<=0){
System.out.println("Please select one(1) to five(5).");
option= input.nextInt();
}
add addobj= new add();
subtract subobj= new subtract();
multiplication mulobj= new multiplication();
division divobj= new division();
if(option!=5)
System.out.println("Enter two number:");
int number1= input.nextInt();
int number2=input.nextInt();
switch(option) {
case 1:
System.out.println("Addition:"+"("+ number1 +") + ("+ number2 +") = "+ addobj.result(number1,number2));
break;
case 2:
System.out.println("Subtraction:"+"("+ number1 +") - ("+ number2 +") = "+ subobj.result(number1,number2));
break;
case 3:
System.out.println("Multiplication:"+"("+ number1 +") * ("+ number2 +") = "+ mulobj.result(number1,number2));
break;
case 4:
while(number1==0){
System.out.println("Please enter non-zero value of first number:");
number1= input.nextInt();
number2= input.nextInt();
}
System.out.println("Division:"+ "("+ number1 +") / ("+ number2 +") = "+ divobj.result(number1,number2));
break;
case 5:
System.exit(0);
//break;
default:
break;
}
System.out.println("\n");
input.close();
}
return ;
}
}
关闭扫描仪以进行循环
Scanner input = new Scanner(System.in);
for( i=0; i<=4;i++) {
}
扫描器类预先读取数据流以提供更好的性能。这可能是这里的问题。当您在没有输入此类元素的情况下尝试调用nextInt时,您将得到java.util.NoSuchElementException。您可以通过对scanner实例方法hasNextInt使用check with方法调用来避免该问题。我认为问题在于除法运算,你应该检查除数是0而不是被除数,并且只取除数的新值而不是两者
关于您的代码,有两点:
a。您正在for循环中创建瞬态对象。您可以在循环之外创建它们。
B如果使用自JDK 7以来就可用的try-with-resource构造,则不需要关闭扫描仪。
C如果您曾经想要关闭扫描仪,您应该在finally块中关闭它,在该块中可能会发生异常,您可能最终泄漏资源。
D检查选项==5的第一个if条件应该在while循环选项>=6 | |选项之后。如果您面临相同的问题,请在此处说明您的问题。我也尝试过,但没有解决问题。给我相同的错误你定义了你的扫描仪外部为循环和关闭它外部为循环。从循环内部移除扫描仪初始值设定项并关闭方法。它应该可以工作。什么是扫描输入=新的扫描系统.in?非常感谢您的努力。我是一个新的学习者,并遵循您的指示。很棒@subhafairuz,您的代码非常完美!通过更多的练习,你会把这些概念弄清楚。如果你需要我的帮助,请不要犹豫。
for( i=0; i<=4;i++) {
}
input.close();
public static void main(String[] args) {
add addobj= new add();//Use camel case naming convention for classes
subtract subobj= new subtract();
multiplication mulobj= new multiplication();
division divobj= new division();
try(Scanner input = new Scanner(System.in)) {
for(int i=0; i<=4;i++) {
System.out.println("1.ADDITION\n2.SUBTRACTION\n3.MULTIPLICATION\n4.DIVISION\n5.EXIT");
System.out.print("Choose Your Operator:");
int option= input.nextInt();
while(option>=6 || option<=0){
System.out.println("Please select one(1) to five(5).");
option= input.nextInt();
}
if(option==5)
return;
System.out.println("Enter two number:");
int number1= input.nextInt();
int number2=input.nextInt();
switch(option) {
case 1:
System.out.println("Addition:"+"("+ number1 +") + ("+ number2 +") = "+ addobj.result(number1,number2));
break;
case 2:
System.out.println("Subtraction:"+"("+ number1 +") - ("+ number2 +") = "+ subobj.result(number1,number2));
break;
case 3:
System.out.println("Multiplication:"+"("+ number1 +") * ("+ number2 +") = "+ mulobj.result(number1,number2));
break;
case 4:
while(number2==0){
System.out.println("Please enter non-zero value of second number:");
number2= input.nextInt();
}
System.out.println("Division:"+ "("+ number1 +") / ("+ number2 +") = "+ divobj.result(number1,number2));
break;
}
System.out.println("\n");
}
}
}