【问题标题】:Java Stack - How do I pop() and push() multiple elements from a stack?Java Stack - 如何从堆栈中弹出()和推送()多个元素?
【发布时间】:2021-12-14 04:05:08
【问题描述】:

我已经有一个堆栈类在工作,但现在我每次只能弹出和推送 1 个元素,我希望能够同时推送和弹出多个元素。无需多次使用 push 和 pop 。我正在尝试创建 2 个函数来做到这一点。函数 pushAllpopN。喜欢:

public void pushAll (Object all[]) throws StackFullException {...}
public Object [] popN (int n) throws StackEmptyException {...}

备注:输入参数all是一个数组,包含所有必须输入的元素。堆叠后向量的最后一个元素必须在顶部。 如果没有空间插入所有元素,则必须不插入任何元素,并且必须引发 StackFullException 异常。 popN 方法弹出由 n 参数指定的元素数量,并将它们存放到一个数组中以供返回。 如果堆栈没有请求的元素数量,则没有元素被取消堆栈并且抛出 StackEmptyException 异常。 我正在尝试几个小时来工作我的逻辑但没有成功。 到目前为止,这是我的 Stack 课程:

public class Stack extends RuntimeException {
    public static final int CAPACITY = 1000;
    private int capacity;
    private Object elements[];
    private int top = -1;

    public Stack(int capacity){
        if (capacity>0){
            this.capacity=capacity;
            elements=new Object[capacity];
        } else {
            this.capacity = CAPACITY;
            elements = new Object[CAPACITY];
        }
    }  
    public Stack(){
        this(CAPACITY);
    }
    
    public boolean isEmpty(){
        return (top < 0);
    }
    
    public boolean isFull(){
        return (top == capacity - 1);      
    }
    
    public void push(Object o) throws StackFullException {
        if (isFull()){
            throw new StackFullException("Stack Overflow!");
        }
        else {
            top++;
            elements[top] = o;
        }
    }
    
    public Object pop() throws StackEmptyException {
        Object elem;
        if (isEmpty()){
            throw new StackEmptyException("Stack Underflow!");
        }
        else {
            elem = elements[top];
            elements[top] = null;
            top--;
            return (elem);
        }
    }
    
    public Object top() throws StackEmptyException {
        if (isEmpty()){
            throw new StackEmptyException("Stack Underflow!");
        }
        else {
            return (elements[top]);
        }
    }
    
    public int size(){
        return (top + 1);
    };

    public Object[] getElements() {
        return elements;
    }
    
    @Override
    public String toString(){
        String string = "[";
        for (int i = 0; i < this.capacity; i++){
            Object element = this.elements[i];
            
            if(element != null){
                string += element + ",";
            }
        }
        string =  string.substring(0, string.length() - 1);
        string += "]";
        return string;
    }
    
    
    public void pushAll (Object all[]) throws StackFullException {
    
    }
    public Object [] popN (int n) throws StackEmptyException {
        
    }
}

可以帮我构建 pushAll 和 popN 函数吗?

【问题讨论】:

  • 我建议你展示你尝试过的东西。
  • 不可能。计算机按顺序或并行运行,但随后您会遇到竞争条件以及其他奇怪的问题。我什至不认为在量子计算机中这是可能的,但我又对此不太了解。
  • 真的是想写Stack extends RuntimeException吗?这对我来说似乎有点奇怪。

标签: java arrays stack push


【解决方案1】:

没有这样的方法。您一次只能推送和弹出一个元素。您可以做的是创建一个方法,传递您要弹出或推送的元素的堆栈和数量,并使用循环实现它。

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2014-12-19
    • 2018-05-02
    • 2020-12-19
    相关资源
    最近更新 更多