2014-03-03 160 views
0

打印出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 = 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代碼中。有什麼想法嗎?

+1

您需要在'GameOfLife'類中重寫'toString()'方法。您得到的輸出來自從「Object」繼承的輸出。 –

回答

2

您可以覆蓋toString()方法。你也可以使用一個StringBuilder

GameOfLife lifeGame = new GameOfLife(); 
System.out.print(lifeGame); 

注:構造沒有返回類型,所以你不應該申報

@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 */} 
+0

是否有一個簡單的理由,爲什麼必須重寫toString()方法?此外,當我嘗試實現覆蓋時,會發生錯誤,指出分號必須放在toString方法的前面。 –

+0

因爲這樣,你可以用'System.out.print(gameOfLifeInstance);' – Christian

+0

這樣簡單地打印一個'GameOfLife'的實例。當試圖實現Override時,會出現一個錯誤,指出在toString之後需要分號,並且我不知道爲什麼。壓倒一切的唯一途徑? –

0

The Class GameOfLife cons tructor不應該有void返回類型(java規則)。 而toString()方法很好實現。