繁体   English   中英

toString方法来打印带有二维布尔数组的游戏板

[英]toString Method to print out a game board with a 2D boolean array

我正在尝试编写一个toString方法,该方法将使用2D布尔数组并根据随机初始化的true或false打印出“ x”或“ _”。 但是,每次我去印刷电路板时,我都会返回一个内存地址,而且我认为它永远不会传递给我的toString,我相信它正确地覆盖了该方法。 我在下面发布了我的代码,并提供了一个示例,说明了如何格式化该格式。 任何帮助将不胜感激。

public static boolean[][] randomize() {

        //Initializes random
        Random random = new Random();

        for (int row = 0; row < board.length; row++) {
            for (int col = 0; col < board[row].length; col++) {
                board[row][col] = random.nextBoolean();
            }
        }

        return board;
    }
 @Override
    public String toString() {
        String result = ""; 

        for (int i = 0; i < board.length; i++) {
            System.out.print(i);
            result += i;
        }
        result += "\n";
        System.out.println();

        for (int row = 0; row < board.length; row++) {
            System.out.print(row);
            result += row;
            for (int col = 0; col < board[row].length; col++) {
                if (board[row][col] == false) {
                    System.out.print("_");
                    result += "_";
                }
                else if (board[row][col] == true) {
                    System.out.print("X");
                    result += "X";
                }
            }
            System.out.println();
            result += "\n";
        }

        return result;
    }  

public void play() {
        currentStatus = GameState.IN_PROGRESS;
        DuoPlayPlayer currentPlayer = playerOne;

        //Creates and Prints the Board
        boolean[][] board = LightsOut.randomize();
        System.out.println(board);
        System.out.println(currentPlayer.getName() + " it is your turn!");
}

这里

boolean[][] board = LightsOut.randomize();
System.out.println(board);

您正在尝试打印木板,但木板实际上是原始布尔值的二维数组。 您已重写的toString()方法将对重写了toString()方法的类的对象起作用。 如果将数组类型的变量传递给System.out.println方法,它将打印其地址。

如果您确实要打印布尔型板,请考虑在循环中使用Arrays.toString()方法-因为此方法仅适用于一维数组。 如果要使用此方法打印二维数组,将获得第二维的数组地址。 或者考虑使用不需要循环的Arrays.deepToString() 但是,这将在您的控制台中输出true / false值。

在您的情况下,建议创建一个名为Board的类,该类将包含二维布尔数组作为成员,并且可以为Board类重写toString()方法。 然后,您可以执行以下操作:

    Board board = new Board();
    System.out.println(board);

在这里,可以隐式调用Board类的重写toString()方法。

我还注意到,在此toString()方法中创建最终结果的方式不是最佳的。 您应该阅读有关诸如字符串不可变性,字符串池和使用诸如StringBuilder之类的主题的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM