Java 如何在堆栈上实现函数isFull()的异常

Java 如何在堆栈上实现函数isFull()的异常,java,generics,stack,Java,Generics,Stack,我应该如何更改isFull()和push()异常才能正常工作? 在驱动程序类中,当元素的最大值为5时,我尝试推送5个元素 public boolean isFull() { return (top == I.length - 1); } 然后我再推一个元素,我的异常是堆栈已满 push("A");push("B");push("C");push("D");push("E"); size() = 5, getTop() = E 所以,我把他们都干掉了 size() =

我应该如何更改isFull()和push()异常才能正常工作? 在驱动程序类中,当元素的最大值为5时,我尝试推送5个元素

public boolean isFull() {
            return (top == I.length - 1);
}
然后我再推一个元素,我的异常是堆栈已满

push("A");push("B");push("C");push("D");push("E");

size() = 5, getTop() = E
所以,我把他们都干掉了

size() = 5, getTop() = E
我推三个元素

Size = 0, getTop = null

但是程序说堆栈已经满了,而最大值是5个元素。如何解决这个问题?

当您弹出大多数元素时(当
top==I.length/4
时),您的
pop
方法将使堆栈的容量减半

您的
push
方法应该在必要时增加容量,但
isFull()
阻止它这样做(因为
isFull()
检查的条件与
(top==I.length-1)
-也用于确定何时应该增加容量)


如果您支持增加容量,
isFull()
意味着什么?要么容量是固定的,在这种情况下您永远不应该更改它,要么容量不是固定的,在这种情况下,
isFull()
应始终返回false。

push()
中,如果堆栈已满,您将抛出异常,同时尝试调整其大小。这怎么可能呢。当抛出异常时,程序控件将直接跳转到最近的匹配异常处理程序。因此,IMHO,堆栈将不会被调整大小。看看StringBuilder.append它可能会帮助您了解如何使用堆栈/数组()@skrtbhtngr好吧,我尝试删除resize()方法,并将pop()和push()修改为固定容量的堆栈。它是有效的。谢谢你的建议。
Size = 0, getTop = null
push("F");push("G");push("H");