我正在用Java進行一些測試以找出菜單驅動的控制檯應用程序。掃描儀 - 控制檯菜單應用程序中的NoSuchElementException
我有這樣的代碼:
public class TestClass {
public static void main(String[] args) {
int option = 99;
do{
System.out.println("1. one");
System.out.println("2. two");
System.out.println("3. three");
System.out.println("0. END");
Scanner scan = new Scanner(System.in);
System.out.println("option : ");
option=Integer.parseInt(scan.next());
scan.close();
switch (option) {
case 0 :
System.exit(0);
break;
case 1 :
caseOne();
break;
case 2 :
caseTwo();
break;
case 3 :
caseThree();
break;
default :
break;
}
} while (option!=0);
}
private static void caseOne(){
System.out.println("Case ONE");
}
private static void caseTwo(){
System.out.println("Case TWO");
}
private static void caseThree(){
System.out.println("Case THREE");
}
}
當我運行它,它工作得很好。 我選擇一個選項並打印出「CASE X」。
奇怪的行爲是當DO循環重新開始時。 它再次顯示菜單,但程序立即終止,顯示NoSuchElementException異常。 奇怪的是,它既不等我輸入數字。
如果除去
scan.close();
聲明它做工作正常altough編譯器警告我的內存泄漏,因爲掃描永遠不會關閉。
它的行爲非常奇怪,因爲在「第一遍」中即使使用te scan.close()但即使創建新的Scanner對象時它仍然會崩潰,因此我認爲它至少要求輸入。
我真的很困惑這一點。
有什麼建議嗎?
完成閱讀。 – silentprogrammer
將'scan.close();'放在方法末尾,'Scanner scan = new Scanner(System.in);'在'do'語句之前 – TheLostMind
沒有理由關閉從System .in'。您可以忽略IDE警告,或者像@TheLostMind所說的那樣做。 – Radiodef