如何解决Java程序不会终止它也不显示任何输出
我的Java程序,有关从LinkedLists生成的堆栈。当前的任务是将两个分类的堆栈合并为一个。我想我已经弄明白了,但它不会显示任何输出,也不会终止。有人可以帮忙吗?
“下一个”实例指向内存中LinkedList的下一个元素的地址。
void mergeStacks()
{
Stacks sortedMain = new Stacks();
Stacks sorted1 = new Stacks();
Stacks sorted2 = new Stacks();
sorted1.push(1);
sorted1.push(2);
sorted1.push(3);
sorted2.push(4);
sorted2.push(5);
sorted2.push(6);
System.out.println("Stack 1");
sorted1.displayStack();
System.out.println("Stack 2");
sorted2.displayStack();
Node q = sorted1.head,p = sorted2.head,x = sortedMain.head;
while(q.next != null)
{
if(x == null)
{
sortedMain.push(sorted1.pop());
}
while(x.next != null)
{
sortedMain.push(sorted1.pop());
x = x.next;
}
q = q.next;
}
while(p.next != null)
{
while(x.next != null)
{
sortedMain.push(sorted2.pop());
x = x.next;
}
p = q.next;
}
System.out.println("Merged Stack\n");
sortedMain.displayStack();
}
因此,我想出了导致控制台不显示任何内容的原因。显然,由于某些原因,函数“ pop()”实际上并没有返回int。方法如下:
int pop()
{
int popped = 0;
if(isEmpty())
{
System.out.println("Stack is empty");
}
else
{
Node q = head;
while(q.next != null)
{
if(q.next.next == null)
{
popped = q.data;
q.next = null;
top = q;
}
}
}
return popped;
}
解决方法
您可以在第一个while循环中使用它,这毫无意义:
if(x == null)
{
sortedMain.push(sorted1.pop());
}
while(x.next != null)
{
sortedMain.push(sorted1.pop());
x = x.next;
}
如果在第一个if
语句中x为null,那么如何在下一个while
语句中使用它?那应该产生一个空的引用异常...
似乎您认为将某物推入一个空的x
时,sortedMain
会以某种方式更新到新的头上吗?不会的。
还应该对“合并的”堆栈进行排序吗?您的代码似乎试图简单地将所有第一个已排序的堆栈推入,然后将所有第二个已排序的堆栈推入。这可能会或可能不会导致整体已排序的堆栈……取决于其中的元素。>
我认为应该发生的是,您仅弹出每个列表中的前两个,并进行比较,然后按更大或更小的值(您未指定排序顺序)。然后,从被推入的一侧弹出下一个并重复。如果一侧变空,则只需将其余所有部分推向另一侧。
来自评论:
我真的不必按照他们要去定义的顺序 合并。我只想将它们以任何顺序合并为一个 第三叠。我的策略是遍历第一个堆栈并 将所有元素压入主堆栈,并使用 下一个。
您是否为isEmpty()
类实现了Stacks
方法?如果是这样,这就是大多数人希望看到的:
while(!sorted1.isEmpty())
{
sortedMain.push(sorted1.pop());
}
while(!sorted2.isEmpty())
{
sortedMain.push(sorted2.pop());
}
如果您尚未实现isEmpty()
类型的方法,则可以检查head
是否为null? (*我假设您在堆栈为空时将其正确设置为null!):
while(sorted1.head != null)
{
sortedMain.push(sorted1.pop());
}
while(sorted2.head != null)
{
sortedMain.push(sorted2.pop());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。