【问题标题】:Read an ArrayStack without empty it, this method doesn't work读取 ArrayStack 不清空,此方法无效
【发布时间】:2018-05-01 21:57:13
【问题描述】:

在java中我写了一个基于数组的堆栈程序,我想写一个方法 读取 ArrayStack 的所有元素而不清空它,因为 pop 函数将清空 ArrayStack。有什么想法吗?

public static <E> void aufgaben(ArrayStack<E> a) {
    ArrayStack<E> b = a;
    ArrayStack<E> c = b;
    ArrayStack<E> d = c;

    while (!c.isEmpty()) {
        System.out.println(c.pop());
    }

}

【问题讨论】:

  • 请问:为什么?
  • "有什么想法吗?" 让您的ArrayStack&lt;E&gt; 类实现Iterable&lt;E&gt; 并实现iterator() 方法以返回Iterator&lt;E&gt;,这样您就可以使用@987654326 @ 在 for 循环中,例如 for (MyObj obj : arrayStack)
  • 请不要将您的问题添加为 Javadoc。 Javadoc 旨在记录方法本身。那就是描述它的作用,参数是什么等。
  • ArrayStack 来自 Commons Collections 吗?如果是,那么它扩展了 ArrayList 并且您可以使用 get(index) 方法。

标签: java stack


【解决方案1】:

我们无法确定任何事情,因为您的问题并未告诉我们ArrayStack 类正在实现什么API。

但是,您的方法不起作用的可能原因是 pop 正在从堆栈中删除元素。没有什么能让他们退缩。

这些陈述毫无用处:

    ArrayStack<E> b = a;
    ArrayStack<E> c = b;
    ArrayStack<E> d = c;

你所做的相当于从a弹出。

Java 中的对象赋值不会复制该对象。它只是复制对象 reference (如果你喜欢指针)。所以你最终会得到abc 都指向(指向)同一个对象。


我猜这是作业,所以这里有一两个提示

  1. 要么在 API 中寻找一种方法,让您在不移除元素的情况下检查堆栈。

  2. 如果没有,想办法在拆开堆栈后重建堆栈。肯定有办法的。想想看。 (提示:第二个堆栈...)

【讨论】:

    猜你喜欢
    • 2022-06-21
    • 2015-06-29
    • 2015-06-24
    • 1970-01-01
    • 2022-06-11
    • 2016-12-02
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多