OutOfBoundsException进入堆栈

时间:2014-10-07 12:32:49

标签: java stack indexoutofboundsexception

我遇到ArrayIndexOutOfBoundsException问题,它总是出现在我的程序中。我怎么可以尝试{}?

@Override
    public Object pop() {
        if (stackIsEmpty()) {
            System.err.println("underflow");
            return null;
        } else {
            try {
                Object temp = stack[top];
                stack[top--] = null;
                System.out.println("top is " + top);
                return temp;
            } catch (ArrayIndexOutOfBoundsException e) {
                return "exception";
            }
        }
    }

添加了其余类的代码(我将-1与-1进行比较到stackisEmpty()):

public class ArrayStackImpl implements ArrayStack {
    private int top = -1;
    private int maxLength;
    public Object stack[] = new Object[maxLength];

    public ArrayStackImpl(int maxLength) {
        this.maxLength = maxLength;
    }

    @Override
    public boolean stackIsEmpty() {
        return (top < 0);
    }

    @Override
    public void push(Object o) {
        if ((top >= maxLength - 1))
            System.err.println("overflow");
        else
            try {
                stack[++top] = o;
            } catch (ArrayIndexOutOfBoundsException e) {
            }
    }

2 个答案:

答案 0 :(得分:1)

检查顶部初始化为-1。不要捕获ArrayIndexOutOfBoundsException,找出原因。此外,您的stackIsEmpty应检查top是否等于-1。

答案 1 :(得分:1)

在弹出非空堆栈top时可能会变为-1(对于“空堆栈”)。所以

private int top = -1;

public boolean stackIsEmpty() {
    return top < 0; // != -1
}

在构造函数中进行字段初始化。在没有初始化maxlength之前,0。 此外,您不需要maxlength作为字段。 stack.length == maxlength

public Object[] stack; 

public ArrayStackImpl(int maxLength) {
    stack = new Object[maxLength];

(我使用了更传统的符号Object[]。)