簡體   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