(初级)为什么多次使用扫描仪时不断获取代码中的"no such element exception"



我正在编写一个简单的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;
    }
}

最新更新