亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LinkedStack 并顯示整個堆棧

LinkedStack 并顯示整個堆棧

一只名叫tom的貓 2022-06-23 09:24:06
我在這些問題上遇到了困難。我有 4 個問題要讓它工作。我得到其中兩個是正確的,但另外兩個是錯誤的。這是一個toString()用于java的:    LLNode<T> node = top;    StringBuilder s = new StringBuilder();    String es = "Empty Stack";    if (node == null)    {        return es;    }    s.append("bottom|");    while (node != null)    {        s.append(node.getInfo());        s.append("|");        node = node.getLink();    }    s.append("top");    return s.toString();}它返回:bottom|3|4|5|top代替bottom|5|4|3|top我的另一個錯誤是它返回:bottom|5|4|3|2|1|top代替bottom|1|2|3|4|5|top如果有人知道如何做到這一點,那就太好了。我被困住了,我不知道為什么它沒有返回我想要的東西。這就是它想要的@Test  public void test_toString_on_a_stack_with_multiple_elements() {    stk1.push(5); stk1.push(4); stk1.push(3);    Assert.assertEquals("bottom|5|4|3|top", stk1.toString());}   @Test  public void test_toString_on_a_full_stack() {    stk1.push(1); stk1.push(2); stk1.push(3); stk1.push(4); stk1.push(5);    Assert.assertEquals("bottom|1|2|3|4|5|top", stk1.toString());}   
查看完整描述

2 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

在 kai 的答案中使用StringBuilder.insertas 可以使代碼正確,但對于大型堆棧來說很慢。類似的方法是先將元素存儲在一個列表中,然后將列表反轉,最后從列表中生成整個字符串。


這是代碼:


public String toString() {

    if (top == null) {

        return "Empty Stack";

    }


    List<String> elements = new ArrayList<>();

    elements.add("top");

    for (LLNode<T> node = top; node != null; node = node.getLink()) {

        elements.add(String.valueOf(node.getInfo()));

    }

    elements.add("bottom");


    elements.reverse();

    return String.join("|", elements);

}

我沒有測試上面的代碼,但我相信它可以工作。很好,您已經有了可用的測試。


在教育環境中,上述代碼可能是不可接受的。這是因為 List 在概念上比 Stack 更復雜。因此,該列表可能尚未在課堂上涵蓋。通常,主題的復雜性越來越高,因此列表可能會使用堆棧,但反之則不然。在實際編程中,上面的代碼雖然可以。


查看完整回答
反對 回復 2022-06-23
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

根據您的發布,打印元素的順序是錯誤的。因此,一種解決方案是預先添加到 StringBuilder 而不是附加。由于索引 0 讓生活更輕松,我還移動了“bootom|” 在收集所有節點并將其添加到緩沖區中的所有節點輸出之前:


LLNode<T> node = top;

    StringBuilder s = new StringBuilder();

    String es = "Empty Stack";


    if (node == null)

    {

        return es;

    }

    while (node != null)

    {

        s.insert(0, "|");

        s.insert(0, node.getInfo());

        node = node.getLink();


    }

    s.insert(0,"bottom|");

    s.append("top");

    return s.toString();

}

(這是未經測試的,寫在我的頭上,因為我沒有你的 LLNode 或任何東西 - 所以盡最大努力)


查看完整回答
反對 回復 2022-06-23
  • 2 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號