2D Checker Board Java阵列无法正确打印

时间:2018-08-12 20:03:51

标签: java

我有我的代码:

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

我应该添加用于打印二维数组的循环吗?感谢任何提示或帮助,谢谢。

4 个答案:

答案 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)

  1. 使用char类型而不是int表示矩阵
  2. 需要第二个括号
  3. 您需要添加一条折线以在各行之间跳转(System.out.println())。如果希望将B和W分开,请在第一张照片上添加空格“”
  4. (样式),您可以在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)

这里有一些问题。

  1. 您需要一个char数组而不是一个int数组。 (从技术上讲,如果您只是打印,则根本不需要数组,但是我假设打印是用于调试的,并且您实际上需要结构)。

  2. 您的计数在应该达到8时仅会达到7。使用board.lengthboard[r].length可以省去很多思考,这是最佳实践。

  3. 您只需要2个变量(行和列),所以我建议尽可能删除误导性和多余的变量。

  4. 您的for需要方括号才能在一个块中执行多行代码。使用方括号总是意味着您永远不会遇到麻烦。

  5. 可以简化奇偶校验。您要交替每列,并按行的奇偶校验偏移它。这将导致一个条件测试:(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