0

すでにいくつかの調査を行いましたが、何も見つかりませんでした。

だからここに私のコードがあります:

public void play(){
    System.out.print("Make your choice ( R - P - S) : ");
    Scanner sc = new Scanner(System.in);
    char choice = sc.next().charAt(0);
    setChoice(choice);
    sc.close();
}

この関数を初めて入力したときはすべて問題ありませんが、次回 NoSuchElementExceptionは関数の 3 行目にスローされます。別のこと:行を削除するsc.close()と問題は消えますが、その行を保持したいです。

解決策はありますか?ありがとう

4

3 に答える 3

3

を閉じるとScanner、基になる入力ストリーム、つまり も閉じられますSystem.in。だからあなたはそれを閉じることができませんでした。

于 2013-03-16T12:38:05.263 に答える
0

スキャナーを閉じないでください。これが問題です。下にある入力ストリームを閉じます。

sc.close();
于 2013-03-16T12:38:44.843 に答える
0

Scanner.close

このスキャナがまだ閉じられていない場合、その基になる読み取り可能なも Closeable インターフェースを実装している場合、読み取り可能なの close メソッドが呼び出されます。このスキャナーが既に閉じている場合、このメソッドを呼び出しても効果はありません。

System.inInputStream実装するCloseableです。

これは、close()sc呼び出すとclose()のメソッドが呼び出されSystem.in、入力ストリームが閉じられ、それに関連付けられているシステム リソースが解放されることを意味します。

于 2013-03-16T12:43:06.690 に答える