Java 打印二维字符数组
打印出2d字符数组并不困难,但我需要的方法似乎是 我当前的目标是初始化一个2d字符数组,使每个单元格都包含“-”。这必须在构造函数方法中完成。以下是我到目前为止的情况Java 打印二维字符数组,java,printing,multidimensional-array,arrays,Java,Printing,Multidimensional Array,Arrays,打印出2d字符数组并不困难,但我需要的方法似乎是 我当前的目标是初始化一个2d字符数组,使每个单元格都包含“-”。这必须在构造函数方法中完成。以下是我到目前为止的情况 public class GameOfLife { public final int MAX_SIZE = 12; // instance variables private char [][] current = new char[MAX_SIZE][MAX_SIZE]; private char [][] next
public class GameOfLife {
public final int MAX_SIZE = 12;
// instance variables
private char [][] current = new char[MAX_SIZE][MAX_SIZE];
private char [][] next = new char[MAX_SIZE][MAX_SIZE];
Scanner keyboard = new Scanner(System.in);
/**
* Constructor for objects of class GameOfLife.
* Initializes the current array to '-'.
*/
public void GameOfLife() {
for ( int i = 0; i < MAX_SIZE; i++){
for ( int j = 0; j < MAX_SIZE; j++){
current [i][j] = '-';
}
}
@Override public String toString() {
StringBuilder sb = new StringBuilder();
for ( int i = 0; i < MAX_SIZE; i++){
for ( int j = 0; j < MAX_SIZE; j++){
sb.append(current[i][j]);
sb.append(" ");
}
sb.append("\n"); // add new line
}
return sb.toString(); // convert to String and return
}
}`
我遇到的问题是lifeGame无法打印,并且出现了一条奇怪的错误消息-GameOfLife@5d3892b3. 我知道有很多方法可以打印出来,但我无法更改驱动程序类中的任何代码,所以所有编辑都必须在GameOfLife代码中。有什么想法吗?您可以重写
toString()
方法。您还可以使用StringBuilder
:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for ( int i = 0; i < MAX_SIZE; i++){
for ( int j = 0; j < MAX_SIZE; j++){
sb.append(current[i][j]);
sb.append(" ");
}
sb.append("\n"); // add new line
}
return sb.toString(); // convert to String and return
}
注意:构造函数没有返回类型,因此不应使用返回类型void
声明它:
public GameOfLife() {/* Constructor body */}
GameOfLife类构造函数不应具有void返回类型(java规则)。
而且toString()方法很好实现。您需要在
GameOfLife
类中重写toString()
方法。您得到的输出来自继承自对象的输出。有没有一个简单的原因可以解释为什么必须重写toString()方法?另外,当我尝试实现覆盖时,会出现一个错误,指出必须在toString方法前面放置分号。因为这样,您就可以使用System.out.print(gameOfLifeInstance)简单地打印GameOfLife
的实例的表示代码>啊,好的。当尝试实现覆盖时,会出现一个错误,指出toString之后会弹出分号,我不知道为什么。重写是唯一的方法吗?@Override
不是问题所在。错误可能在其他地方。试着仔细检查你的代码。在放入覆盖代码之前,我没有语法错误。覆盖代码应该在GameOfLife方法中吗?这就是我拥有它的地方。
GameOfLife lifeGame = new GameOfLife();
System.out.print(lifeGame);
public GameOfLife() {/* Constructor body */}