2017-10-07 7 views
0

ではNoSuchElementException私はここに、コンソールから一部のデータを取得する必要がありScannerクラスに問題があるが、コードは次のとおりです。Scannerクラス

private static int getInputFromTheConsole() { 
    System.out.println("Enter one of the menu options."); 
// Scanner sc = new Scanner(System.in); 
// return sc.nextInt(); 
    try(Scanner sc = new Scanner(System.in)) { 
     return Integer.parseInt(sc.nextLine()); 
    } catch (NumberFormatException e) { 
     return -1; 
    } 
} 

私は2つのコメント行を使用する場合、それが正常に動作しますが、私は使用している場合リソースが試行されているスキャナはNoSuchElementExceptionを投げます。 try-catchブロックでプログラムのデバッガをデバッグしようとすると、単に入力を待つことはありませんが、前に述べたように、コメント行のコードで正常に動作します。 どうしてですか?

+3

TRY-と資源たとえば。 – Pshemo

+0

代わりにsc.nextInt()を使用してみませんか? –

+0

System.inから読み取るスキャナは1つだけにしてください。他のメソッドに渡すことはできますが、これらのメソッドは(System.inから読み込む必要がなくなったことが確実でない限り)閉じません。 – Pshemo

答えて

0

NoSuchElementException列挙体にnext要素がないことを示すために、列挙体のnextElementメソッドによってスローされます。

Scanner.hasNextInt()メソッドを呼び出すことで、入力があるかどうかを確認できます。また、あなたはもうそれから読み取ることができない理由である、ここでそのデータのソース、System.inを閉じる意味その資源、ここではスキャナのインスタンスを閉じ

if(sc.hasNextInt()) 
    input = sc.nextInt();