2011-04-02 65 views
0

我有2個類,實現Tree接口的NonEmptyTree和EmptyTree。在NonEmptyTree類中的toString()方法應該返回一個字符串:key=>value key=>value key>value etc ... 我不知道如何在結果結尾刪除最後一個空格。 編輯:我不能使用任何方法在字符串類,我不能比較任何東西爲空。多態二進制搜索樹

public String toString() { 
     String result = ""; 
     result+=(this.left.toString()); 
     result+=this.key; 
     result+="=>"; 
     result+=this.value; 
     result+=" "; 
     result+=this.right.toString(); 
     return result; 
    } 

我試過具有指示如果NonEmptyTree實例是在當前樹中最大的類變量,但控制檯上顯示相同的字符串。

例如,該字符串應該是這樣的:

"7=>seven 10=>ten 12=>twelve 15=>fifteen 16=>sixteen 17=>seventeen 20=>twenty 30=>thirty " 

任何幫助,將不勝感激。感謝

回答

2

使用String.trim()

return result.trim() 

BTW。如果添加了很多String,最好使用StringBuilder及其方法append()而不是將與+相加。

+0

我試過裝飾..這是行不通的。我不允許使用String類中的任何方法。感謝您的幫助 – jun 2011-04-03 03:53:54

1

你可以簡單地添加'if'嗎?請看下圖:

public String toString() 
{ 
    String result = ""; 
    result+=(this.left.toString()); 
    result+=this.key; result+="=>"; 
    result+=this.value; 
    if (this.right!=null) // Just add this, so it doesn't add an extra space if no right result exists 
    { 
     result+=" "; 
     result+=this.right.toString(); 
    } 
    return result; 
} 
+0

我認爲你需要交換if條件中的兩條語句。如果我理解正確,如果右分支不爲空,那麼輸出應該有一個空間,然後是該分支。 – 2011-04-02 22:49:04

+0

非常正確的比爾。我從原帖中匆匆複製/粘貼它。它已被糾正。謝謝。 – Matt 2011-04-02 22:52:41

+0

我不能比較null雖然..謝謝你的答案 – jun 2011-04-03 03:52:49

2
public String toString() { 
    StringBuilder result = new StringBuilder(); 
    result.append(this.left.toString()); 
    result.append(this.key); 
    result.append("=>"); 
    result.append(this.value); 
    result.append(" "); 
    result.append(this.right.toString()); 
    return result.toString().trim(); 
} 
+0

StringBuilder的默認容量是16個字符。考慮使用更大的初始容量對其進行初始化,以防止增量重新分配和複製。 – seh 2011-04-02 23:24:35

+0

公平點......但即使考慮到它會比他在做的更好) – 2011-04-02 23:26:45

+0

@seh:這裏的問題是我們需要知道結果字符串有多大,因爲我們不想創建不需要太大的緩衝區。 – 2011-04-03 02:03:10