在线程“主”中获取错误Exception java.util.NoSuchElementException

时间:2019-09-21 05:54:42

标签: java multithreading exception

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 ;
    }
}

My code is working fine but i'm getting one warning that i didn't closed my scanner. But when i'm closing the Scanner,it's giving me another error!! Exception in thread "main" java.util.NoSuchElementException

2 个答案:

答案 0 :(得分:0)

java.util.NoSuchElementException是一个RuntimeException,可以由Java中的不同类(例如Iterator,Enumerator,Scanner或StringTokenizer)抛出。

如果基础数据结构中没有任何元素,则所有这些类都具有获取下一个元素或下一个标记的方法,Java抛出“ java.util.NoSuchElementException”。

在不检查是否有任何元素的情况下遍历hashmap的最常见示例,这就是为什么建议在对Iterator调用next()之前使用hashNext()的原因。


在for循环外初始化扫描仪

Scanner input = new Scanner(System.in);
for( i=0; i<=4;i++) {

}

关闭扫描仪以进行循环。

for( i=0; i<=4;i++) {

}
input.close();

Scanner类可以预先读取数据流以提供更好的性能。可以在这里发布。

答案 1 :(得分:0)

在没有输入任何元素的情况下尝试调用java.util.NoSuchElementException时,将得到nextInt。您可以通过在扫描程序实例方法hasNextInt上使用方法调用check来避免此问题。我认为问题出在您的除法运算中,您应检查除数是否为0而不是红利,并且只取除数的新值而不是两个值。

关于您的代码的事情:

a。您正在for循环中创建临时对象。您可以在循环之外创建它们。
b。如果使用从JDK 7开始可用的try with resource构造,则无需关闭扫描仪。
C。如果您想关闭扫描仪,则应在finally块中将其关闭,以防发生异常并最终导致资源泄漏。
d。检查option == 5的第一个if条件应该是在while循环while(option>=6 || option<=0){

之后

总而言之,这可能是解决您的问题的代码:

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");
       }
    }
}