1

Scanner オブジェクトを取得してユーザー入力を読み取る際に問題が発生しています。スキャナーでユーザー入力を読み取り、入力をバイト配列に保存する必要があります。

次のコードを使用する場合:

import java.util.Scanner;

public class ExamTaker {
    public static void main(String[] args) {
        // Variable Declaration
        char[] studentTest = new char[20];

        // Input Setup
        Scanner keyboard = new Scanner(System.in);

        // Take the test
        for (int i = 0; i < studentTest.length; i++) {
            System.out.print("\nAnswer " + (i+1) + " : ");
            studentTest[i] = keyboard.nextLine().charAt(0); // The troubled line
        }
    }
}

次のような例外エラーが発生します。

Answer 1 : Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at ExamTaker.main(ExamTaker.java:14)

Stack Overflow と Google で調査した結果、次のように、問題のある行を try-catch に配置することを提案しました。

// Take the test
        for (int i = 0; i < studentTest.length; i++) {
            System.out.print("\nAnswer " + (i+1) + " : ");
            try {
                studentTest[i] = keyboard.nextLine().charAt(0);
            }
            catch (Exception e) {
                System.out.print("Exception found");
            }
        }

ただし、これは nextLine() メソッドの使用方法に問題があると思われるものに対しては、まだ目的の出力を生成しません。番号付きの各回答の前に「Exception found」リテラルをスローするだけです。

また、for ループを do-while ループに変更し、行末に到達しなかった場合に備えて keyboard.getChar() を投げてみましたが、役に立ちませんでした。

この場合、最初の文字を取得して char 配列に割り当てる文字列をユーザーに入力させるにはどうすればよいですか? よろしくお願いします。

4

1 に答える 1

2

Scanner#nextLine()は行が見つからない場合にスローNoSuchElementExceptionします。おそらく、呼び出す前にScanner#hasNextLine() を呼び出しnextLine()て、次の行がスキャナに存在することを確認する必要があります。

 for (int i = 0; i < studentTest.length; i++) {
            System.out.print("\nAnswer " + (i+1) + " : ");
            if(keyboard.hasNextLine()){
                studentTest[i] = keyboard.nextLine().charAt(0); // The troubled line
             }
        }

また、スキャナーからユーザー入力を取得したいだけだと思いますが、Scanner#next()を使用しないのはなぜですか

for (int i = 0; i < studentTest.length; i++) {
            System.out.print("\nAnswer " + (i+1) + " : ");
            studentTest[i] = keyboard.next().charAt(0); // The troubled line
        }
于 2013-01-30T01:36:46.547 に答える