簡體   English   中英

線程java.util.NoSuchElementException中的Java異常

[英]Java Exception in thread java.util.NoSuchElementException

我有一個Java應用程序源代碼,它得到的錯誤與我在此處編寫代碼的應用程序相同。 他們兩個都得到這個:“線程” main“中的異常” java.util.NoSuchElementException“如果我解決了這個問題,那么我可以在我的主要Java應用程序中解決問題。

當我運行此Java應用程序時,它將運行一次,而回到do-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();
}

有人可以幫我解決這個問題嗎?

您將在sum()sub()的末尾關閉Scanner ,您不應該這樣做。 刪除這兩個語句,問題應該得到解決。

發生的事情是Scanner#close()方法也關閉了基礎輸入流,因此下一次通過主循環System.in已關閉,從而導致異常。

我認為您應該一次打開掃描儀

  • 將其用作私有靜態字段,
  • 在主程序的開頭對其進行初始化,
  • 最后關閉它,
  • 稱之為正常。

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM