首页 > 解决方案 > 我如何让这个板像我想要的那样打印出来

问题描述

完全是java的菜鸟,我有一个家庭作业,我需要制作一个自定义国际象棋游戏,但我什至在打印游戏板时遇到了困难,我正在尝试将所有空白空间与“X”一起使用。我当前的“代码”:

public class Chess {

    public static void main(String[] args) {
        String[][] board = new String[7][7];
        fillBoard(board);


    }
    public static void fillBoard(String[][] board){
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 7; j++) {
                board[i][j] = "X";
                System.out.print(Arrays.deepToString(board));
            }
            System.out.println();
        }
    }
}

它打印出来: 这个

当我希望它打印出来时: 这是

标签: java

解决方案


阅读您的评论后,我意识到这不仅仅是打印您关心的数组;相反,您担心以后如何访问它。注释中已经提供了打印不正确问题的解决方案,即替换System.out.print(Arrays.deepToString(board));System.out.print("X");. 我在这里解释另一部分(即以后如何访问它)以及一些有助于您设计应用程序的附加信息。

  1. 当您在某些方法中传递和更改数组时,调用方法的数组也将更改(检查以了解更多信息)。意思是什么时候board[][]换进去fillBoard,你就会得到换board[][]进去的main
  2. 根据单一职责原则,模块/方法fillBoard应该只做一件事,那就是填满板子。它也不应该做打印(额外的事情)。您应该编写不同的打印方法。
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[][] board = new String[7][7];
        fillBoard(board);
        displayBoard(board);
    }

    static void fillBoard(String[][] board) {
        for (String[] row : board) {
            Arrays.fill(row, "X");
        }
    }

    static void displayBoard(String[][] board) {
        for (String[] row : board) {
            for (String cell : row) {
                System.out.print(cell);
            }
            System.out.println();
        }
    }
}

输出:

XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX
XXXXXXX

附加说明:

二维数组是一维数组的数组,因此您可以通过多种方式编写上面给出的代码,例如

static void fillBoard(String[][] board) {
    for (int i = 0; i < board.length; i++) {
        Arrays.fill(board[i], "X");
    }
}

或使用增强for循环:

static void fillBoard(String[][] board) {
    for (String[] row : board) {
        Arrays.fill(row, "X");
    }
}

或不使用Arrays.fill

static void fillBoard(String[][] board) {
    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board[i].length; j++) {
            board[i][j] = "X";
        }
    }
}

类似地,方法,displayBoard可以写成:

static void displayBoard(String[][] board) {
    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board[i].length; j++) {
            System.out.print(board[i][j]);
        }
        System.out.println();
    }
}

请注意,我使用board.lengthandboard[i].length而不是77数和列数,以确保每次更改数组大小时都不必更改它。


推荐阅读