Java:为什么 char 二维数组上的循环不包括最后一个字符?

Java: Why does the loop on a char 2D-array not include the last char?

我是 Java 的新手,我正在为 TicTacToe 游戏实现游戏板。为了在比赛结束后清理棋盘,我正在尝试使用一种方法,该方法带有两个嵌套循环,可以像游戏开始时一样重新放置棋盘。问题是,最后一个单元格保持不变。这是我的代码:

public class CharLoopTest {
    static char[] [] board = {{'X','|','O','|','O'},
            {'_', '|', '_','|','O'},
            {'X','|','_','|','X'}};
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        clearBoard(board);
    }
    public static void clearBoard(char [] [] board) {
        for(int r = 0; r < board.length; r++){
            for(int c = 0; c < board.length; c++) {
                if(board[r][c] == 'X' || board[r][c] == 'O') {
                    board[r][c] ='_';
                }
                
            }    
        }
        printBoard(board);
    }
    public static void printBoard(char [] [] board) {   
        for(char [] row: board) {
            for(char column: row) { 
                System.out.print(column);   
            }
            System.out.println();   
        }
    }
}

输出:

_|_|O
_|_|O
_|_|X

我正在努力弄清楚为什么迭代器没有到达数组长度的第 [行][4] 位置。我尝试增加索引,但 int 将越界迭代。这是目前唯一的工作方式:

public static void clearBoard(char [] [] board) {
        for(int r = 0; r < board.length; r++){
            for(int c = 0; c < board.length; c++) {
                if(board[r][c] == 'X' || board[r][c] == 'O') {
                     board[r][c] ='_';
                     board[0][4] = board[r][c]; //cleans last cells
                     board[1][4] = board[r][c];
                     board[2][4]= board[r][c]; 
                }
                
            }    
        }
        printBoard(board);
    }

我们将不胜感激每一个提示。非常感谢您。

问题是你有一个 3x5 的网格。 board.length 然后 returns 3,即使您想遍历每个数组的内容,您也在调用 board.length。如果将第二个 for 循环中的条件更改为 c < board[r].length,它将 return 第 r 个元素的长度,即 5。