ここには 2 つのコード ブロックがあります。1 つのスキャナーはユーザー入力を適切に待機し、もう 1 つのスキャナーはそれを通り抜けて呼び出しnextInt()
、NoSuchElementException
. 動作するブロックは次のとおりです。
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()
呼び出します。これは、いくつかの Player クラスstartGame()
のメソッドを呼び出します...これは、動作しないコードが存在する場所です。findBestMove()
プログラムの中で、入力を受け取るのが適切でない時間はありますか? ユーザー入力が必要なときはいつでも、このアプローチを使用できるという印象を受けました。ありがとう!