gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:14:10 25 4
gpt4 key购买 nike

import java.util.*;
import java.lang.Iterable;

public class MyStackArray <Item> implements Iterable<Item> {
private Item I[];
private int top;
private int size;
private final static int DEFAULT_SIZE = 10;

public MyStackArray () {
this(DEFAULT_SIZE);
}

public MyStackArray (int capacity) {
size = capacity;
I = (Item[]) new Object [capacity];
top = -1;
}

public Item getTop() {
if (isEmpty())
return null;
return I[top];
}

public boolean isEmpty() {
return (top == -1);
}

public boolean isFull() {
return (top == I.length - 1);
}

public Item pop() throws EmptyStackException {
if (isEmpty())
throw new EmptyStackException ();
Item item = I[top];
I[top--] = null;
if(top> 0 && top== I.length / 4)
resize(I.length/2);
return item;
}

public void push(Item item) throws FullStackException {
if (isFull())
throw new FullStackException ();
if (top== I.length - 1)
resize(2 * I.length);
I[++top] = item;
}

public int size() {
return (top+ 1);
}

private void resize (int newCapacity) {
Item t[] = (Item[]) new Object[newCapacity];
for (int i = 0; i <= top; i++)
t[i] = I[i];
I = t;
}

public Iterator<Item> iterator() {
return new MyStackArrayIterator();
}

private class MyStackArrayIterator implements Iterator <Item> {
private int i = top;

public boolean hasNext() {
return (i > -1);
}

public Item next() {
return I[i--];
}

public void remove() {
throw new UnsupportedOperationException();
}
}
}

这是Stack使用泛型方法的代码。对于 isEmpty,一切顺利,异常正常。

public boolean isFull() {
return (top == I.length - 1);
}

我应该更改什么才能使 isFull() 和 push() 异常正常工作?在驱动程序类中,当元素的最大值为 5 时,我尝试压入 5 个元素。

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

size() = 5, getTop() = E

然后我再压入一个元素,我的异常显示堆栈已满。

size() = 5, getTop() = E

所以,我把它们都弹出了。

Size = 0, getTop = null

我推送 3 个元素,

push("F");push("G");push("H");

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

最佳答案

当您弹出大部分元素时(top== I.length/4),您的pop 方法将Stack 的容量减半。

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

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

关于java - 如何在堆栈上实现函数 isFull() 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com