Java linkedstack大小的输出始终为0?

Java linkedstack大小的输出始终为0?,java,data-structures,iteration,size,Java,Data Structures,Iteration,Size,输出总是0。我不明白。我正在尝试使用迭代方法查找linkedstack的大小。我检查了linkedstack是否正在推送元素,但大小仍然没有改变 一般情况下 我在默认Java库中没有找到“LinkedStack”,但在Java.util中找到了正常的堆栈 这个答案基于Java.util.Stack 通过使用Stack而不是LinkedStack您的代码工作得非常好(案例1=0,案例2=5) 我在驱动程序中更改了一行:Stack l=newstack() 也许是你的方法的致命弱点 您的method

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

一般情况下
我在默认Java库中没有找到“
LinkedStack
”,但在
Java.util
中找到了正常的
堆栈
这个答案基于
Java.util.Stack

通过使用
Stack
而不是
LinkedStack
您的代码工作得非常好(案例1=0,案例2=5) 我在驱动程序中更改了一行:
Stack l=newstack()

也许是你的方法的致命弱点
您的methode在计数时清空堆栈。这是因为这两种方法都修改了内存中的同一个点,并且通过删除堆栈中的元素进行计数。
您如何看待它:
添加行
System.out.println(“案例3:Size(Iter)=”+sizeIter(l))在驱动程序的末尾
=>这将返回“案例3:尺寸(Iter)=0”

其他解决方案

  • 使用
    堆栈的默认
    .size()
    方法
  • 在使用while循环计数之前,使用迭代方法创建堆栈的深层克隆
脚注

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

请在您的问题中添加相关的语言标记。您真的打算让size方法总是清空堆栈吗?从技术上讲,一旦运行
sizeIter()
,堆栈的大小始终为0…这不就是清空参数LinkedStack p而不是实际的LinkedStack l吗?@faria
p
l
都是指向内存中某个
LinkedStack
实例的变量。如果你清空了对象,它就是空的,不管你使用哪个变量来访问它;它仍然是空的。请发布您的完整代码,以便我可以复制、编译和运行。如果
LinkedStack
是您从其他地方创建或复制的东西(不是Java发行版的一部分),也可以发布它。还要复制并粘贴程序的实际输出。您发布的代码似乎不可能产生您描述的输出。如果我可以使用堆栈,生活会更轻松,但我不能。我的具体项目是使用linkedstack。是的,我注意到问题是清空Linkedstack。我不知道还有什么方法可以让我在不清空的情况下得到这个尺寸。linkedStack和stack之间的唯一区别在于它们是链接的,并且使用节点。我不想发帖,因为这可能算作剽窃。谢谢你@faria如果你不想分享linkedStack的实现,我将无法进一步帮助你。不管怎样,祝这个项目好运!
   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));