修复了Java中的大小isEmpty(),isFull()和异常

时间:2013-12-02 17:22:57

标签: java

我需要帮助的是:

  1. 使isEmpty()和isFull()方法返回一个答案告诉我堆栈是否为空或堆栈已满是正确的代码是什么

  2. 我需要制作我的堆栈,我使用的是五(5)的设置大小(堆栈可以容纳5个整数)

  3. 我需要在push()和pop()方法中添加异常,这些方法不会在堆栈已满时使用推送,或者在堆栈为空时使用pop


  4. import java.util.ArrayList;
    import java.util.List;
    
    public class IntegerStack {
    
        private List<Integer> stack;
    
        public IntegerStack(int SIZE) {
            stack = new ArrayList<Integer>(SIZE);
        }
    
        /* method to push the stack */
        public void push(int i) {
    
            stack.add(0, i);
        }
    
        /* method to pop the stack */
        public int pop() {
            if (!stack.isEmpty()) {
                int i = stack.get(0);
                stack.remove(0);
                return i;
            } else {
                return -1;// Or any invalid value
            }
        }
    
        /* method to peek at the stack */
        public int peek() {
            if (!stack.isEmpty()) {
                return stack.get(0);
            } else {
                return -1;// Or any invalid value
            }
        }
    
        /* determine if the stack is empty */
        public boolean isEmpty() {
            stack.isEmpty();
        }
    
        /* determine if the stack is full */
        public boolean isFull() {
            stack.isFull();
        }
    
        /* determine the size of the stack */
        public int size() {
            if (stack.isEmpty())
                return 0;
            else
                return stack.size();
        }
    
    }
    

3 个答案:

答案 0 :(得分:0)

1。 正如Clad在评论中提到的,看起来你只是错过了isEmpty()函数上的return关键字:

/* determine if the stack is empty */
public boolean isEmpty() {
    return stack.isEmpty();
}

但是,对于isFull()函数,isFull()类上没有List函数,您必须自己实现。您必须跟踪通过构造函数传递的整数,以便将其与存储在对象中的列表大小进行比较

2。 你是否应该允许这个对象的用户指定他们想要的任何SIZE,或者你应该总是有5个整数限制?

3。 您可能希望阅读How to Throw Exceptions

上的Java文档的这一部分

答案 1 :(得分:0)

在问之前你真的看过怎么做吗?好像你只是复制粘贴一个你不会得到的代码。

import java.util.ArrayList;
import java.util.List;

public class IntegerStack {

private int max_size;
private List<Integer> stack;

public IntegerStack(int size) {
    max_size = size;
    stack = new ArrayList<Integer>(size);
}

/* method to push the stack */
public void push(int i) {
        stack.add(0, i);
}

/* method to pop the stack */
public int pop() {
    if (!stack.isEmpty()) {
        int i = stack.get(0);
        stack.remove(0);
        return i;
    } else {
        return -1;// Or any invalid value
    }
}

/* method to peek at the stack */
public int peek() {
    if (!stack.isEmpty()) {
        return stack.get(0);
    } else {
        return -1;// Or any invalid value
    }
}

/* determine if the stack is empty */
public boolean isEmpty() {
    return stack.isEmpty();
}

/* determine if the stack is full */
public boolean isFull() {
    //go through all your stack and see if there are things not set to get if it's full.
}

/* determine the size of the stack */
public int size() {
    if (stack.isEmpty())
        return 0;
    else
        return stack.size();
}
}

创建对象时,将5作为参数。您可能需要对代码进行其他更改;)

亲自尝试,你会得到更多改善:D

答案 2 :(得分:0)

此处的主要关注点是请求的实现应为 bounded ,即具有最大数量的元素(参数为SIZE,以5个为例)。 / p>

以下是一些见解:

  • 构造函数ArrayList<T>(int)允许为数组列表指定初始容量(默认值为10)。但是,这绝不提供堆栈大小的上限。有关说明,请参见http://CONFGSERVERIP(帖子涉及Vector,但对于this post来说,想法是相同的。)。

  • 方法push(int)需要明确处理客户端代码尝试将元素推入已满的堆栈的情况。这样做的语义是设计决策(引发异常,静默忽略等)。

  • 有关如何实现有界堆栈的更广泛讨论,请参见ArrayList