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 配列に割り当てる文字列をユーザーに入力させるにはどうすればよいですか? よろしくお願いします。