0

Javaスキャナーとユーザー入力を処理するための2つのループがありますNoSuchElementが、ユーザーからの入力を要求せずに最初のループにヒットすると、例外がスローされます。

Scanner Guess_input = new Scanner( System.in );


    while (guess > 0){
        failure = true;
        while(failure)
        {

            System.out.println("Please input");
            try
            {
                if (Guess_input.nextLine().length() == 1 && guesses.size() >= 1) {
                    guesses.add(Guess_input.nextLine());
                    System.out.println("You guessed" + guesses.get(guesses.size()) + "");
                }
                else if (Guess_input.nextLine().length() == 0) {
                    System.err.println("ERROR:");
                    Guess_input.nextLine();   //Clean Buffer
                    failure = true;
                }
                else 
                {
                    System.err.println("ERROR");
                    Guess_input.nextLine();   //Clean Buffer
                    failure = true;
                }
            }   
            catch(InputMismatchException ime)

            {
                System.err.println("error");
            }
            finally
            {
                Guess_input.close();
            }
        }
    }
4

3 に答える 3

3

Javaのドキュメントからnext()、クラスのメソッドを使用すると、次のScannerようになります。

NoSuchElementException - if no such tokens are available

メソッドを呼び出すときはいつでもnextLine()、を入力することになっていますString。必要nextLine()な場合を除いて、最初にの結果をローカル変数に格納する必要があります。

もう1つの問題は、try catch finallyがで行われることwhile loopです。これは、反復ごとに、finallyブロックが毎回実行されることを意味します。したがって、例外があると思いますが、例外はない場合もあります。これらの変更を適用する

try {
   while (guess > 0) {
       while (.....) {
           .....
       }
   }
} catch (...){
   ....
  }
finally{ .... }
于 2012-07-31T16:18:25.480 に答える
1

誤ったステートメントはguesses.get(guesses.size())です。Javaリストでは、ゼロベースのインデックスを使用します。つまり、最初の要素のインデックスは常に0で、最後の要素はサイズ-1です。定義上、リストのサイズは無効なインデックスです。

おそらく、リストに追加する前に、次の行を独自の変数に保持する必要があります。これにより、sysoutステートメントは、値をリストから引き出すのではなく、変数を参照できるようになります。しかし、簡単な解決策は、コードを次のように変更することです。guesses.get(guesses.size() - 1)

于 2012-07-31T16:06:50.903 に答える
0

guess.nextLine()を何度も呼び出しています。nextLine()を呼び出すたびにアプリがブロックされ、入力が必要になります。さらに、他の人が指摘したように、そこには他にも心配すべき問題があります。

しかし、私はスキャナーに固執します。

于 2012-07-31T16:12:05.500 に答える