打印出2d字符阵列并不困难,但我需要这样做的方式似乎是。
我目前的目标是初始化一个二维字符数组,这样每个单元格都包含' - '。这必须在构造函数方法中完成。以下是我到目前为止的情况。
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
}
}`
如果只是用这种方法打印,我知道如何正确打印它;但是,我必须以下列方式使用“GameOfLife”构造函数。下一个代码在驱动程序类中,称为“gameoflifedriver”。
// Create a GameOfLife object
GameOfLife lifeGame = new GameOfLife();
System.out.print(lifeGame);
我遇到的问题是lifeGame不会打印,并且会出现奇怪的错误消息 - GameOfLife @ 5d3892b3。我知道有办法打印它,但我无法更改驱动程序类中的任何代码 - 所以所有的编辑都必须在GameOfLife代码中。有什么想法吗?
答案 0 :(得分:2)
您可以覆盖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
}
然后您可以使用以下方式打印此表示:
GameOfLife lifeGame = new GameOfLife();
System.out.print(lifeGame);
注意:构造函数没有返回类型,因此您不应该使用返回类型void
声明它:
public GameOfLife() {/* Constructor body */}
答案 1 :(得分:0)
类GameOfLife构造函数不应该具有void返回类型(java规则)。 并且toString()方法很适合实现。