【问题标题】:Java Tic Tac Toe: convert string to check for value in 2d arrayJava井字游戏:转换字符串以检查二维数组中的值
【发布时间】:2012-05-09 01:42:43
【问题描述】:

我正在创建一个简单的井字游戏。我使用单个空格字符初始化了我的 3x3 板。

private char[][] board;
private char player; // 'X' or 'O'

public TicTacToe() {
 for(int i = 0; i < 3; i++)
   {
     for(int j = 0; j <3; j++)
     {
       board[i][j] = ' ';
     }
   }
 player = 'X';
 }

我要求用户输入如下所示的坐标:

   1  2  3
A |  |  |  |
B |  |  |  |
C |  |  |  |

所以如果 X 进入 B2,O 进入 A3,棋盘将如下所示:

   1  2  3
A |  |  |O |
B |  | X|  |
C |  |  |  |

现在,我正在尝试编写一个方法来检查当前玩家的移动是否有效。

问题: 如何转换用户字符串输入 (A=1,B=2,C=3) 以便查看 board[x][y] 是否包含 ' ' 字符?

【问题讨论】:

    标签: java tic-tac-toe


    【解决方案1】:

    您可以使用String.charAt(int) 从字符串中的任意位置获取字符。请注意,与数组一样,字符串中的第一个字符是索引 0,而不是 1。

    然后您可以将它们转换为索引,如下所示:

    input = input.toUpperCase(); // Makes code work for all cases
    int x = input.charAt(0) - 'A';
    int y = input.charAt(1) - '1';
    char currentValue = board[x][y];
    

    之后,currentValue 将包含当前在该位置的游戏板上的值。

    【讨论】:

    • 您介意详细说明您的第二行和第三行代码中发生了什么吗?我不明白你为什么要减去“A”和“1”。
    • 这是因为数组从0开始,如果用户输入1,他实际上是指数组中的0单元格。 'A' 也一样。这是ASCII码。 'A' - 'A' = 0. 'B'-'A' = 1(如果我没记错的话,'A' 的代码是 49,因为它是一个 int。)
    • @Lablabla 谢谢你的解释。有道理。
    【解决方案2】:

    您可以简单地检查。因为你只有 3 个选项,你可以这样做:

    int row = input.charAt(0);
    int col = input.charAt(1) - 1;
    
    if(row == 'A')
        row = 0;
    else if(row == 'B')
        row = 1;
    else if(row == 'C')
        row = 2;
    

    现在你可以得到协调了

    if(board[row][col]).equals("X") {
    ....
    }
    else if(board[row][col]).equals("O") {
    ...
    }
    else {
    ...
    }
    

    【讨论】:

      【解决方案3】:

      我喜欢 Jake King 的解决方案,它非常简洁优雅,但在我的偏好中,它不是“通过查看即可调试”

      我会做这样的事情,我个人认为这更明确

          Map<Character, Integer> rowMap = new HashMap<Character, Integer>();
          rowMap.put('A', 0);
          rowMap.put('B', 1);
          rowMap.put('C', 3);
      
          // Validations of input come here first...
      
          int row = rowMap.get(input.charAt(0));
          int col = Character.getNumericValue(input.charAt(1))-1;
      
          char place = board[row][col]; 
      
          if(place!=' '){
              throw new RuntimeException("Place is not empty");
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多