2015-02-24 93 views
0

我的程序有效。我只是想知道是否有一種方法讓我通過實際返回一個字符串來打印我的表格,而不僅僅是使用System.out.print。 換句話說,我想知道如果不是返回null,我可以返回打印出我的表的字符串。打印我的方法的另一種方法?

/** 
    * Print the magic square in table form. 
    */ 
public String toString() { 

    for (int row = 0; row < (magicSquare.length); row++) { 
     // row gets #row 
     System.out.print("\t"); 
     for (int column = 0; column < (magicSquare[row].length); column++) { 
      //column gets #column 
      System.out.print(magicSquare[row][column] + "\t"); 

      // when all column has been completed make new line 
      if (column == size - 1) { 
       System.out.print("\n"); 
      } 

     } 
     System.out.print("\n"); 

    } 

    return null; 
} 
+2

簡短的回答是肯定的,長的回答是,更換'和'StringBuilder' – MadProgrammer 2015-02-24 00:57:37

+0

@MadProgrammer威爾System.out.print'這需要更多的代碼?它會毫無意義嗎? – name 2015-02-24 00:59:56

+0

不,幾乎相同 – MadProgrammer 2015-02-24 01:02:16

回答

2

簡短的回答是,你可以。長的答案將涉及的東西,如StringBuilder更換System.out.print語句,例如...

public String toString() { 

    StringBuilder sb = new StringBuilder(64); 

    for (int row = 0; row < (magicSquare.length); row++) { 
     // row gets #row 
     sb.append("\t"); 
     for (int column = 0; column < (magicSquare[row].length); column++) { 
      //column gets #column 
      sb.append(magicSquare[row][column] + "\t"); 

      // when all column has been completed make new line 
      if (column == size - 1) { 
       sb.append("\n"); 
      } 

     } 
     sb.append("\n"); 

    } 

    return sb.toString(); 
} 
+0

想你,我在找什麼。只是想知道StringBuilder和常規字符串對象之間的區別。是否有可能用一個字符串對象做同樣的事情。 – name 2015-02-24 01:02:44

+0

'String'是不可變的,不能改變,'StringBuilder'在內部建立'String'(使用'char'數組)。當涉及到這樣的循環時,效率會更高,因爲編譯器不會優化「字符串」連接,這意味着每次「添加」一個字符串(字符串=字符串+「等等」)時,實際上創建了3個新的臨時'String'對象。這可以給系統帶來負擔,因爲這些對象需要被創建,放置在堆上並在短時間內重複處理。 – MadProgrammer 2015-02-24 01:09:42

+0

當你在一個循環中執行'String'連接時,通常使用'StringBuilder'來避免這些開銷。 – MadProgrammer 2015-02-24 01:09:59

相關問題