检查 char 是否在 java 中的二维数组中

Check if a char is in a 2D array in java

我一直在做创建一个简单的国际象棋程序的作业。

棋盘是一个二维数组,命名为board。这些片段都是单个字符,如 R、Q、K,空 space 填充了 ' ' 字符,因此 space.

public static char[][] board;

方法 get 应该 return 字符或坐标 (x,y) 上的任何内容。

 public char get(int x, int y) {
        if(x < board[0].length && x >= 0 && y < board.length && y >= 0){
            return board[x][y];
        }
        else
            return '[=12=]';
    }

问题是我的评估谁是赢家的程序没有按预期工作。

这个程序检查每队的王是否还在棋盘中,所以棋盘数组。

它应该return0 如果两个都还活着,1,如果只有白王还活着,2 如果只有黑王还活着。

我编写了一个程序,或者至少尝试编写了一个程序,它遍历每个坐标并检查是否有代表白王的字符 'K',以及 'S',黑王.

我已将布尔值 kingIsAlive 设置为 false,这样如果在数组中找不到 K 或 S,它仍然是 false。

不过,我的代码在底部,带有 if 和 else returns 0,1 or2,有错误,kingWhiteIsAlive 总是 false 并且kingBlackIsAlive 始终为 false。

所以,我认为我将 kingIsAlive 布尔值变为 true 的程序根本不起作用....

我得到的错误是:

白方本应赢 => 预期:<1> 但实际是:<-1>

没有人应该赢 => 预期:<0> 但是:<1>

经过几个小时的尝试,我放弃了,决定在这里提问。

public int decideWinner(){
    boolean kingWhiteIsAlive = false;
    boolean kingBlackIsAlive = false;

    for(int y = 0; y < board.length;y++){
        for(int x = 0;x < board[0].length;x++){
            if(get(x,y) == 'K'){
                kingWhiteIsAlive = true;
            }
        }
    }
    for(int j = 0; j < board.length;j++){
        for(int i = 0;i < board[0].length;i++){
            if(get(i,j) == 'S'){
                kingBlackIsAlive = true;
            }
        }
    }
    if(kingWhiteIsAlive && kingBlackIsAlive){
        return 0;
    }
    else if(kingWhiteIsAlive && !kingBlackIsAlive){
        return 1;
    }
    else if(!kingWhiteIsAlive && kingBlackIsAlive){
        return 2;
    }
    else
        return -1;
} 

return -1 用于测试两队都没有国王的情况。

我已经测试了你的代码,它 运行 完美,也许问题出在你的电路板初始化上?

尝试通过在 decideWinner 函数开头显示数组的实际内容来调试您的代码。

我已经对开发板使用了这个初始化,如果它可能有帮助的话。

public void initBoard() {
  board = new char[8][8];
  // Init pawns
  for (int j = 0; j < board.length; j++) {
    board[j][1] = 'P';
    board[j][6] = 'P';
  }
  // Rooks
  board[0][0] = 'R';
  board[7][0] = 'R';
  board[0][7] = 'R';
  board[7][7] = 'R';

  // Knights
  board[1][0] = 'N';
  board[6][0] = 'N';
  board[1][7] = 'N';
  board[6][7] = 'N';

  // Bishops
  board[2][0] = 'B';
  board[5][0] = 'B';
  board[2][7] = 'B';
  board[5][7] = 'B';

  // Queens
  board[3][0] = 'Q';
  board[4][7] = 'Q';

  // Kings
  board[4][0] = 'K'; // White
  board[3][7] = 'S'; // Black

  // Empty space
  for (int y = 0; y < board.length; y++) {
    for (int x = 2; x < 6; x++) {
      board[y][x] = ' ';
    }
  }
}

如果找到国王,则需要中断搜索。您可以通过 break 语句来完成。

for(int y = 0; y < board.length;y++){
    for(int x = 0;x < board[0].length;x++){
        if(get(x,y) == 'K'){
            kingWhiteIsAlive = true;
            break;
        }
    }
}
for(int j = 0; j < board.length;j++){
    for(int i = 0;i < board[0].length;i++){
        if(get(i,j) == 'S'){
            kingBlackIsAlive = true;
            break;
        }
    }
}