2015-02-05 111 views
3

我有一個調用類方法的主要方法;用toString()方法返回對象

CourseListQ2 list = new CourseListQ2(); 

list.addCourse(new Course("Structure and Modelling", "Chemistry", 1)); 
list.addCourse(new Course("Design in Engineering", "Engineering", 1)); 
...... 

在這個類中,我寫了,我創建的對象的數組從主要方法,並隨後擴大它,刪除的值,我並不需要。於是,我寫了一個toString方法是假設返回上一個新行的每個對象:

public String toString(){ 
     return Arrays.toString(arrayCourses) ;} 

但是,它返回在一行整個數組。很顯然,我誤解了這種方法的確切作用。

我有兩個想法,要麼我猜想嘗試都返回作爲對象,像的getName()。的toString(arrayCourses)+得到年()。的toString(arrayCourses)+ 「\ n」,

或者,也許我想創建一個循環,添加一個新行。然而,我認爲這樣做會破壞採用toString方法的目的,並且它在輸出開始時仍會返回'[''。

所以,任何人都可以解釋爲什麼發生這種情況,也許提出一個更好的方法?

+1

只寫你自己的'的toString()'方法。聽起來像你在正確的軌道上。 – tnw 2015-02-05 18:08:39

回答

0

我誤解了這個方法確實做了什麼。

Arrays.toString將數組格式設置爲單個String,其中各個元素的字符串表示形式用逗號分隔。

要麼我猜想嘗試都返回作爲對象,像getName().toString(arrayCourses) + getYear().toString(arrayCourses) + "\n"

這不會完全解決問題,因爲Arrays.toString插入逗號會留在那裏。通常,在toString實現中追加'\n'並不是一個好主意,因爲它假定了調用者將使用該字符串的方式。

或者,也許我想創建一個循環,添加一個新行。

這是一個更好的主意。使用StringBuilder,並調用其append方法兩次 - 第一次爲對象,第二次爲\n字符。

注意:不要直接附加'\n',請使用System.getProperty("line.separator");來獲取系統特定的行分隔符。

StringBuilder res = new StringBuilder(); 
String newLine = System.getProperty("line.separator"); 
for (Course c : arrayCourses) { 
    res.append(c); 
    res.append(newLine); 
} 
0

toString()方法中使用循環沒有任何問題。但是,如果您使用Java8,則可以使用String.join。所以,如果你想有隻在一行中使用

return String.join('\n', arrayCourses); 
1

每個元素在你的榜樣Arrays.toString(arrayCourses)您呼叫的Arrays類的toString()方法,下面就是Java Docs說,關於該方法:

返回指定的 數組內容的字符串表示形式。字符串表示由數組的 元素的列表組成,方括號(「[]」)。相鄰元素是 ,由字符「,」(逗號後跟空格)分隔。 通過String.valueOf(float)將元素轉換爲字符串。如果a爲null,則返回 「null」。

對於這種方法,我會建議@dasblinkenlight提供了哪些建議。

0

在Java中每個對象都有一個toString()方法(如果你沒寫一個有提供一個缺省的)

如果我們嘗試集合對象上運行的toString()運行了toString ()方法,並在[]之間打印它們,以','分隔。

如果你想擁有自己的實現,那麼,我建議要覆蓋的方法的的toString()打印值的方式,你想