我在這裏有兩個代碼塊。一臺掃描儀正確等待用戶輸入,另一臺掃描儀正好通過它並呼叫nextInt()
,該返回NoSuchElementException
。這裏是工作的塊:Java掃描器不等待輸入
public void startGame() {
out.println("Player1: 1 for dumb player, 2 for smart player, 3 for human player.");
Scanner scan = new Scanner(System.in);
p = scan.nextInt();
if (p == 1)
p1 = new DumbPlayer("ONE");
if (p == 2)
p1 = new SmartPlayer("ONE");
else
p1 = new HumanPlayer("ONE");
out.println("Player2: 1 for dumb player, 2 for smart player, 3 for human player.");
p = scan.nextInt();
if (p == 1)
p2 = new DumbPlayer("TWO");
if (p == 2)
p2 = new SmartPlayer("TWO");
else
p2 = new HumanPlayer("TWO");
scan.close();
這裏是不塊:
public int findBestMove(Set<Integer> moves, Board b) {
Set<Integer> set = new HashSet<Integer>();
out.println("Player " +name+ ", select a column from 1-7: ");
Scanner scan = new Scanner(System.in); <--here it should wait for input, but does not!
int move = scan.nextInt(); <-- NoSuchElementException
scan.close();
for (int x = 1; x <= 7; x++) {
set.add(move);
move += 7;
}
....etc
這兩者都是獨立的類,並且在另一個類是從main方法調用。基本上main()
調用startGame()
,它依次調用一些Player類的findBestMove()
方法...這是非工作代碼所在的地方。在計劃中是否有時候不適合採取投入?我的印象是,任何時候我想要用戶輸入,我都可以使用這種方法。謝謝!
我在'findBestMove'中看到你做了一個'scan.close()',它也會關閉源碼流 - 你是否在'startGame()'中執行同樣的操作,在'etc'之後的某個地方執行? –
在這個問題中討論的類似問題,不知道它是否應該關閉爲一個重複:http:// stackoverflow。com/questions/7056749/scanner-issue-when-using-nextline-after-nextint –
@Dennis我在發帖之前看了一眼,我不認爲我的問題是相關的,但可能是錯誤的。 – Houdini