gpt4 book ai didi

java - 数组 链表 栈

转载 作者:行者123 更新时间:2023-12-02 04:13:31 29 4
gpt4 key购买 nike

我必须使用索引 0 作为堆栈的顶部,并且在实现此操作时遇到问题。我得到了所有 null,但输出 100、200 和 300 是我得到的唯一数字。我忽略的实现有什么问题吗? push 方法应该实现 ArrayListStack,将元素推送到索引 0 处,并且应该只能删除顶部元素(索引 0)

public class NaughtyArrayStack<E> implements Stack<E>
{
private E[] data = (E[])(new Object[10]);
private int size;
public boolean isEmpty()
{
return (size == 0);
}

public void push(E newData)
{
if (size == data.length)
{
E[] newDataArray = (E[])(new Object[size*2]);
for (int i = 0; i < size; i++)
if(isEmpty())
data[0] = newData;
else
newDataArray[i+1] = data[i];
data = newDataArray;
}

data[0] = newData;
size++;
}

public static void main(String[] args)
{
Stack<Pancake> breakfast = new NaughtyArrayStack<Pancake>();
for (int i = 10; i <= 300; i += 10)
{
breakfast.push(new Pancake(i));
}
}
}

最佳答案

由于其他人已经为您提供了完整的解决方案,因此这里是一个紧凑版本,没有多余的代码( DRY ):

public void push(E newValue)
{
E[] newData = (this.size < this.data.length ? this.data : (E[])new Object[this.size * 2]);
System.arraycopy(this.data, 0, newData, 1, this.size);
newData[0] = newValue;
this.data = newData;
this.size++;
}

如果您还添加此方法,则可以打印堆栈而不会看到任何尾随空值:

@Override
public String toString() {
StringBuilder buf = new StringBuilder().append('[');
for (int i = 0; i < this.size; i++) {
if (i != 0) buf.append(", ");
buf.append(this.data[i]);
}
return buf.append(']').toString();
}

或者 Java 8 中的更简单版本:

@Override
public String toString() {
StringJoiner joiner = new StringJoiner(", ", "[", "]");
for (int i = 0; i < this.size; i++)
joiner.add(String.valueOf(this.data[i]));
return joiner.toString();
}

关于java - 数组 链表 栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33557640/

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