gpt4 book ai didi

java - 输出的linkedstack大小始终为0?

转载 作者:行者123 更新时间:2023-11-30 02:17:41 25 4
gpt4 key购买 nike

   public static int sizeIter(LinkedStack p)
{
int s= 0;
if(p.isEmpty())
return 0;
else
{
while(p.isEmpty()==false)
{
p.pop();
s++;
}
System.out.println("iter" + s);
return s;
}
}
//Here's my driver

public static void main(String[] args) {
LinkedStack l = new LinkedStack();
System.out.println("Case 1: Size(Iter) = "+ sizeIter(l));
l.push(5);
l.push(4);
l.push(3);
l.push(2);
l.push(1);
System.out.println("Case 2: Size(Iter) = "+ sizeIter(l));

输出总是0。我不明白。我正在尝试使用迭代方法找到链接堆栈的大小。我检查了 linkedstack 正在推送元素,但大小仍然没有改变。

最佳答案

一般情况
我在我的默认Java库中没有找到“LinkedStack”,但我找到了正常的StackJava.util .
此答案基于Java.util.Stack
通过使用Stack而不是LinkedStack你的代码工作得非常好(情况 1 = 0 和情况 2 = 5)我在驱动程序中更改了一行:Stack<Integer> l = new Stack<Integer>();

也许你的方法是致命的
您的方法在计数时清空堆栈。这是因为这两种方法都会修改内存中的同一位置,并且您是通过删除堆栈的元素来计数的。
如何查看:
添加行 System.out.println("Case 3: Size(Iter) = "+ sizeIter(l));在驱动程序的末尾
=> 这将返回“情况 3:Size(Iter) = 0”

其他解决方案

  • 使用默认值 .size() Stack的方法.
  • 使用迭代方法并在使用 while 循环进行计数之前创建堆栈的深度克隆

脚注
else迭代方法的一部分是不必要的,因为如果 if评估true该方法无论如何都会重新运行。

关于java - 输出的linkedstack大小始终为0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47797735/

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