线程Java.util.NoSuchElementException中的Java异常

线程Java.util.NoSuchElementException中的Java异常,java,Java,我有一个java应用程序源代码,它得到了一个和我在这里编写代码的应用程序相同的错误。 他们两人都有这样的想法: 线程“main”java.util.NoSuchElementException中的异常 如果我解决了这个问题,那么我就可以在我的主java应用程序中解决这个问题 当我运行这个java应用程序时,它会运行一次,当返回到do while循环时,它会出错。 线程“main”java.util.NoSuchElementException中的异常 代码: 有人能帮我解决这个问题吗?您正在关闭

我有一个java应用程序源代码,它得到了一个和我在这里编写代码的应用程序相同的错误。 他们两人都有这样的想法: 线程“main”java.util.NoSuchElementException中的异常 如果我解决了这个问题,那么我就可以在我的主java应用程序中解决这个问题

当我运行这个java应用程序时,它会运行一次,当返回到do while循环时,它会出错。 线程“main”java.util.NoSuchElementException中的异常

代码:


有人能帮我解决这个问题吗?

您正在关闭
sum()
sub()
末尾的
扫描仪,您不应该这样做。删除这两个语句,问题应该得到解决


发生的情况是,
Scanner#close()
方法也会关闭底层输入流,因此下次通过主循环
系统时,
中的已关闭,导致异常。

我认为您应该一次性打开扫描仪

  • 将其用作专用静态字段
  • 在主菜单的开始处初始化它
  • 最后把它关上
  • 称之为正常

祝您好运

“线程中的异常”main“java.util.NoSuchElementException”
您就得到了这些吗?没有堆栈跟踪?没有行号?它不会解决您的问题,但在sub和sum方法中,您都使用in.nextInt()读取浮点值;这是为自己设置了一个非常容易抛出的InputMismatchException。编辑:我只是复制了你的代码,并没有问题地运行了它。下面的答案都是正确的。我能重现吉姆解释的问题。然后,Pignic为您提供了解决方案。您可能还需要添加一些验证,以确认输入了一个数字。他已经创建了新的扫描仪,关闭新的扫描仪并阅读Javadoc中的API描述并不重要。关闭
扫描仪
关闭底层流。@JimGarrison在添加注释之前,他发布了底层输入流也被关闭的消息。
public static void main (String args[]) {
    int c=-1;
    Scanner input=new Scanner(System.in);
    do{
        System.out.println("1- Sum");
        System.out.println("2- Sub");
        System.out.print("Enter your selection : > ");
        c=input.nextInt();
        res(c);
    }while(c!=0);
    input.close();
}

public static void res(int c) {
    switch (c) {
    case 1:
        System.out.println("++++++++++");
        sum();
        break;
    case 2:
        System.out.println("----------");
        sub();
        break;

    default:
        break;
    }
}
public static void sum() {
    float a,b,c;
    Scanner in=new Scanner(System.in);
    System.out.println("enter two number :");
    System.out.print("first number : ");
    a=in.nextInt();
    System.out.print("second number : ");
    b=in.nextInt();
    c=a+b;
    System.out.println(a+" + "+b+" = "+c+"   END.");
    in.close();
}
public static void sub() {
    float a,b,c;
    Scanner in=new Scanner(System.in);
    System.out.println("enter two number :");
    System.out.print("first number : ");
    a=in.nextInt();
    System.out.print("second number : ");
    b=in.nextInt();
    c=a-b;
    System.out.println(a+" - "+b+" = "+c+"   END.");
    in.close();
}