我正在尝试编写一个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!");
}
答案 0 :(得分:2)
这里
boolean[][] board = LightsOut.randomize();
System.out.println(board);
您正在尝试打印木板,但是木板实际上是原始布尔值的二维数组。您已覆盖的toString()
方法将适用于已被toString()
方法覆盖的类的对象。如果将数组类型的变量传递给System.out.println
方法,它将打印其地址。
如果您确实要打印布尔型板,请考虑在循环中使用Arrays.toString()方法-因为此方法仅适用于一维数组。如果要使用此方法打印二维数组,将获得第二维的数组地址。或者考虑使用不需要循环的Arrays.deepToString()。但是,这将在您的控制台中输出true / false值。
在您的情况下,建议创建一个名为Board
的类,该类将包含二维布尔数组作为成员,并且可以为toString()
类重写Board
方法。然后,您可能会做类似的事情:
Board board = new Board();
System.out.println(board);
这里toString()
类的重写Board
方法可以隐式调用。
我还注意到,您在此toString()
方法中创建最终结果的方式不是最佳的。您应该阅读有关诸如字符串不可变性,字符串池以及使用诸如StringBuilder之类的类的主题。