我正在编写一个简单的TIC TAC TOE游戏,该游戏是玩家与计算机。对于我的方法PlayerMaketurn,我希望玩家首先输入他们将搬进来的行,然后进入该行中的列。但是,我不断得到以下内容:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at TicTacToe.playerMakeTurn(TicTacToe.java:62)
at TicTacToe.main(TicTacToe.java:17)
我尝试实现hasnextint(),但是我的实现很可能是不正确的。
public static String[][] playerMakeTurn (String[][]playGrid)
{
boolean validMove = false;
Scanner in = new Scanner (System.in);
while (validMove != true)
{
System.out.println("Make your move: enter row number (top to bottom; 1-3)");
int rowMove = in.nextInt() - 1;
System.out.println("Make your move: enter column number for row " + (rowMove + 1) + ": (left to right; 1-3)");
int colMove = in.nextInt() - 1;
if (playGrid[rowMove][colMove] == "-");
{
playGrid[rowMove][colMove] = "X";
validMove = true;
}
}
return playGrid;
}
我希望它打印第一个语句,我输入行值。然后它打印下一个,然后输入列值。我已经阅读了类似的答案,但坦率地说,我不了解它们。我的代码的正确版本是什么样的。
此代码效果很好,您的问题必须在所示的代码之外。我做了一个执行代码的MVCE(请参见下文),并且在运行时不会引发您的异常(我尝试了所有9个输入)。
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
playerMakeTurn(new String[3][3]);
}
public static String[][] playerMakeTurn (String[][]playGrid)
{
boolean validMove = false;
Scanner in = new Scanner (System.in);
while (validMove != true)
{
System.out.println("Make your move: enter row number (top to bottom; 1-3)");
int rowMove = in.nextInt() - 1;
System.out.println("Make your move: enter column number for row " + (rowMove + 1) + ": (left to right; 1-3)");
int colMove = in.nextInt() - 1;
if (playGrid[rowMove][colMove] == "-");
{
playGrid[rowMove][colMove] = "X";
validMove = true;
}
}
return playGrid;
}
}