在堆栈数组实现中推送和弹出元素后,我希望打印出堆栈数组。当我使用下面的print方法时,它会打印出包含所有元素的数组,包括应该弹出的元素(因此应该消失)。为什么这样做?这是正常的,还是我的代码有问题?
如果我使用isEmpty()
方法,它会识别它是空的,但是在打印堆栈时,它会打印所有元素,就好像它们从未被弹出一样。堆栈是空的,它实现了它,所以为什么不打印空堆栈或抛出异常?
这是堆栈数组类中的print方法。
public void print()
{
for (String string : array)
{
if (string != null)
{
System.out.println(string);
}
}
}
除了这种方法之外,确实没有任何异常,但如果它有帮助,我也可以发布pop()
和push()
方法。困扰我的主要事情是,在弹出元素之后但它仍然不是空的,我想看看堆栈数组中剩下的是什么。然而,它不是打印剩下的东西,而是打印所有内容。如何在没有已经弹出的元素的情况下打印堆栈数组?
答案 0 :(得分:0)
好吧,如果您的堆栈由数组支持,则在打印堆栈内容时不应该打印整个数组(因为该数组具有固定长度,并且打印它将始终打印固定数量的元素,无论Stack的当前内容如何)。
您必须拥有索引,告诉您该堆栈正在使用该阵列的哪些元素。如果堆栈的末尾(输入的第一个元素)是数组的第一个元素(0索引),则必须有一些索引指向堆栈的头部,从中弹出元素。在这种情况下,您的打印方法应如下所示:
public void print()
{
for (int i=0;i<head;i++)
{
System.out.println(array[i]);
}
}
这假设当堆栈为空时head == 0。