【问题标题】:How to create a Generic Stack pop method in java如何在java中创建一个通用堆栈弹出方法
【发布时间】:2019-08-01 07:48:15
【问题描述】:

我目前正在开发一个 Stack 项目,我正在创建一个通用的 Stack 类。我一直在为此寻找堆栈溢出,但找不到它。我需要帮助在我的代码中创建 pop 方法。

这是我目前所拥有的:

public class Stack<E>
{
public static final int DEFAULT_CAPACITY = 10;
private E [] elementData;
private int size;

@SuppressWarnings("unchecked")
public Stack()
{
    this.elementData = (E[]) new Object[DEFAULT_CAPACITY];
}
@SuppressWarnings("unchecked")
public Stack(int capacity)
{
    if(capacity < 0)
    {
        throw new IllegalArgumentException("capacity " + capacity);
    }
    this.elementData = (E[]) new Object[capacity];
}
public boolean isEmpty()
{
    if(size == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
/*
The push method should add its parameter to the top of the stack.
*/
public void push(E item)
{
    ensureCapacity(size+1);
    elementData[size] = item;
    size++;
}
private void ensureCapacity(int capacity)
    {
    if(elementData.length < capacity)
    {
        int newCapacity = elementData.length * 2 + 1;
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

我在这里需要帮助。我需要让 pop 方法删除并返回堆栈顶部的元素。如果没有项目 存在,它应该抛出一个“EmptyStackException”。

    public E pop()
    {
    if(isEmpty())
    {
        throw EmptyStackException
    }
    else
    {

    }
}
}

【问题讨论】:

  • 通过您的实现,顶部元素将始终是数组中最后插入的元素。这应该为您指明正确的方向。
  • 您的pop 应该与您的push 相反
  • @ScaryWombat 唯一的问题是,我用 item 替换什么?
  • 为什么需要更换?只需递减size
  • @ScaryWombat item 不在 pop 方法中,所以如果我做与 push 相反的操作,item 会站在哪里?

标签: java arrays generics stack


【解决方案1】:
public E pop()
 {
    E item;

    if(isEmpty())
    {
        throw new EmptyStackException();
    }
    else
    {
        item = elementData[size];
        size--;
    }
    return item;
}

您需要使返回变量等于堆栈数组的顶部,然后递减堆栈数组。此外,您需要通过设置 size=0 来初始化堆栈。

【讨论】:

  • 你需要初始化你的堆栈。 - 你是什么意思?构造函数有什么问题?
  • 还有你想先减少size
  • 我很抱歉没有更具体...我第一次尝试提供帮助。
  • 是的,他确实想先减小尺寸,因为他已经在推动时增加了尺寸。
【解决方案2】:

我想通了,我将功劳归功于@ScaryWombat。代码是:

public E pop()
{
    if(isEmpty())
    {
        throw new EmptyStackException();
    }
    else
        {
            return elementData[--size];
    }

}

【讨论】:

  • 这回答了一切!谢谢@ScaryWombat
猜你喜欢
  • 2019-08-08
  • 2015-07-02
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
相关资源
最近更新 更多