2013-10-18 82 views
0

我有一个java应用程序的源代码,它得到的错误与我在此处编写代码的应用程序相同。 他们得到这个: “线程中的异常”主要“java.util.NoSuchElementException” 如果我解决这个问题,那么我可以解决我的主要Java应用程序中的问题。线程中的Java异常java.util.NoSuchElementException

当我运行这个Java应用程序时,它运行一次,并且当返回执行while循环时,它会得到错误。 “异常线程 ”main“ java.util.NoSuchElementException”

代码:

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

有谁可以帮我解决这个问题?

+1

' “异常线程 ”main“ java.util.NoSuchElementException”'那是你得到的?没有堆栈跟踪?没有行号? –

+1

它不会解决你的问题,但在你的sub和sum方法中,你正在使用in.nextInt()读取浮点数;这是为自己设置一个非常容易抛出的InputMismatchException。 编辑:我刚刚复制你的代码,并没有问题运行它 – EyeOfTheHawks

+0

下面的答案都是正确的。我可以重现吉姆解释的问题。 Pignic然后给你解决方案。您可能还想要添加的是验证是否输入了数字。 – Tim

回答

0

您在sum()sub()的末尾关闭Scanner,您应该不要这样做。删除这两个陈述,问题应该修复。

发生什么事是Scanner#close()方法也关闭底层输入流,所以下一次通过主循环System.in已关闭,导致异常。

+0

他已经创建了新的扫描仪,无所谓他在那里关闭了他的新扫描仪 – EyeOfTheHawks

+0

阅读Javadoc中的API描述。关闭一个'Scanner'关闭底层的流。 –

+0

@JimGarrison他发布之前,你添加注意到基础输入流也被关闭。 –

0

我认为你应该再打开扫描仪对所有

  • 使用它作为一个私有静态字段,
  • 主开始初始化,
  • 接近它的尽头,
  • 正常称之为。

好运

相关问题