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”,但是在Stack中找到了普通的Java.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/

10-16 06:47