Java linkedstack大小的输出始终为0?
输出总是0。我不明白。我正在尝试使用迭代方法查找linkedstack的大小。我检查了linkedstack是否正在推送元素,但大小仍然没有改变 一般情况下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
我在默认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吗?@fariap
和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));