我有我的代码:
class CheckerBoard
{
public static void main(String[] args)
{
int[][] board = new int[8][8];
int r = 0;
int c = 0;
int i = 0;
for(r = 0; r < 7; r++){
for(c = 0; c < 7; c++)
if((i % 2) == 0)
board[r][c] = 'B';
if((i % 2) != 0)
board[r][c] = 'W';
i++;
}
System.out.print(board[r][c]);
}
}
现在它打印出一个0。我打印此2d数组不对吗?输出应为:
B W B W B W B W
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
W B W B W B W B
我应该添加用于打印二维数组的循环吗?感谢任何提示或帮助,谢谢。
答案 0 :(得分:0)
您应该使用board.length,因为它是java中数组的属性,因为它们是对象。另外,您的for循环不会一直到数组中的全部8个元素,因为您执行的次数少于7,这意味着0-6表示7个元素,而不是8个。
答案 1 :(得分:0)
有两件事是错误的。
print语句应位于第二个for循环内。在您现在拥有的位置,您应该有一个空println
,以打印换行符
您的i++
计数器错误。棋盘的第一行以白色结尾,第二行以白色继续。有了i++
,您就输了。您可以完全删除i
。一个足够的条件是:如果(r + c) % 2 == 0
是白色,则为黑色。
答案 2 :(得分:0)
(样式),您可以在for范围内初始化变量r和c
char[][] board = new char[8][8];
int i = 0;
for(int r = 0; r < board.length; r++){
for(int c = 0; c < board[r].length; c++) {
if (i % 2 == 0)
board[r][c] = 'B';
else
board[r][c] = 'W';
i++;
System.out.print(board[r][c] + " ");
}
System.out.println();
}
答案 3 :(得分:0)
这里有一些问题。
您需要一个char
数组而不是一个int
数组。 (从技术上讲,如果您只是打印,则根本不需要数组,但是我假设打印是用于调试的,并且您实际上需要结构)。
您的计数在应该达到8时仅会达到7。使用board.length
和board[r].length
可以省去很多思考,这是最佳实践。
您只需要2个变量(行和列),所以我建议尽可能删除误导性和多余的变量。
您的for
需要方括号才能在一个块中执行多行代码。使用方括号总是意味着您永远不会遇到麻烦。
可以简化奇偶校验。您要交替每列,并按行的奇偶校验偏移它。这将导致一个条件测试:(r + c) % 2 == 0
。
将它们放在一起:
class CheckerBoard {
public static void main(String[] args) {
char[][] board = new char[8][8]; // <-- char, not int
for (int r = 0; r < board.length; r++) { // <-- iterate up to 8, not 7
for (int c = 0; c < board[r].length; c++) { // <-- use braces
if ((r + c) % 2 == 0) { // <-- include column in parity check
board[r][c] = 'B';
}
else {
board[r][c] = 'W';
}
System.out.print(board[r][c]);
}
System.out.println();
}
}
}
输出:
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
这是一个repl。