簡體   English   中英

鏈接列表的toString方法

[英]toString method for a linkedList

在我的linkedList類中,我的toString得到了奇怪的輸出。

我不能使用任何方法,只能使用String concat。 因此如何處理此方法受到限制。

這是代碼:

@Override
public String toString() {
if (head == null) {
return "";
}
String result = "";
Node curr = head;

while (curr.next != null) {
curr = curr.next;
result += curr.data + ", ";
}
return result;
}

我寫了一個JUnit測試:

assetsEquals(
"8,6,7,5,3,0,9, " + "9,0,3,5,7,6,8", dataTest.noOrderList().toString());

並且noOrderList()。toString()來自:

public static noOrderList<Integer> noOrderList() {
return makeListInNoOrder(new Integer[]{ 8, 6, 7, 5, 3, 0, 9, 9, 0, 3, 5, 7, 6, 8});

當我運行測試時,我得到:

expected:<... 3, 0, 9, 9, 0, 3[]> but was: <... 3, 0, 9, 9, 0, 3[, ]>

是這個的原因,在[,]中如何消除該逗號?

謝謝

您總是將", "字符串附加到結果中。

  • 因此,對於第一個元素,請附加"9, "
  • 第二個是"0, "
  • 等等...
  • 最后,在最后添加"3, "

相反,僅當下一個元素不為null ", "才應附加", "

例如:

while (curr.next != null) {
curr = curr.next;
    result += curr.data;
    if (curr.next != null)
        result += ", ";
}

為了保存一些比較,您應該在元素之前發出", " ,並在循環之前發出第一個元素:

//don't print head, since that seems to be empty in your implementation.
//also make sure head does not reference `null` by accident...
if (curr.next == null)
    return result;
curr = curr.next;

//1st element after `head`
result += curr.data;

while (curr.next != null) {
    curr = curr.next;
    result += ", " + curr.data;
}

我還注意到您從未將head元素放入結果中。 是空的,還是一個錯誤?

您的替代行為具有此周期

while (curr.next != null) { curr = curr.next; result += curr.data + ", "; }

當您到達末尾時,無論是否有另一個curr.next總是添加一個逗號。

如果您可以將子字符串在循環后立即刪除,否則請在添加逗號或開始將第一個字符串附加到循環外並在內部以逗號開始連接之前再檢查curr.next!= null是否為空

在您的While循環中,我們到達了curr.next!= null的最后一個迭代,並且仍在其后附加了“,”。

您可以在附加逗號之前檢查curr.next.next ==。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM