我不太了解扫描仪的行为。我想先输入一个int,然后在while循环中输入下一行输入。但是在第一次输入后,我得到一个ArrayOutOfBoundsException,如下所示。它只是忽略了我想输入下一行。唯一的解决方案是当我输入int和用一行中的空格分隔的新行时,但这不是我想要的,因为在这一点上,用户不知道,输入后输入什么第一个int。
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt() - 1;
logic.setGameField(games.get(i).getGameField());
// scanner.reset(); //what does that do?
view.displayField(logic.getCompleteGameField(), logic.getGameSize(), logic.getCompleteGameSize());
double time = System.currentTimeMillis();
while (!logic.gameIsFinished()) {
System.out.println("Spalte Reihe Zeichen: X/*");
String s = scanner.nextLine();
char[] tmp = s.toCharArray();
//just for testing
System.out.println(s.length()); //outputs: 0
System.out.println(tmp.length); //outputs: 0
for (int j = 0; j < tmp.length; j++) {
System.out.print(tmp[j] + " " + j);
}
System.out.println();
logic.setSingleField(tmp[1] - CHAR_TO_INT_OFFSET_ROW, tmp[0] - CHAR_TO_INT_OFFSET_COLUMN, tmp[2]); //throws as expected ArrayIndexOutOfBoundsException
答案 0 :(得分:1)
这是因为Scanner.nextInt()不会将您带到下一行。此时,您仍处于当前输入行。您可以做的是在Scanner.nextInt()之后调用另外的Scanner.nextLine():
int i = scanner.nextInt() - 1;
scanner.nextLine();
logic.setGameField(games.get(i).getGameField());