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。
我是 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。