假设我有list(0,1,2,3,4,5,6)
我已经有queue
课了。
我希望结果为1,3,5,0,2,4,6
(第n个位置的项目附加到原始queue
的末尾。
这是我到目前为止所做的:
Queue a=new Queue();
for(int i=0;i<7;i++){
a.enter(i);
}
Queue temp=new Queue();`
while(!a.isEmpty()){
temp.enter(a.leave());//put the first element in temp
System.out.print(a.leave()+" ");//print out the second one
a.enter(temp.leave());//put the first element at the end of original queue
}
所以我的想法是将leave
的项目存储在temp
中然后输入。
无论我如何尝试,它都无法给我正确的结果。它是一个无限循环。
leave()
删除第一项并将其返回。
enter()
将元素放在队列的末尾
好的,我已经解决了这个问题。 我应该这样做:
while(!a.isEmpty()){
a.enter(a.leave());
System.out.print(a.leave()+" ");
}
然后它会给我正确的结果。
感谢大家的努力,对不起,如果这个问题有什么不清楚的话。我还是新手:)
答案 0 :(得分:1)
我首先警告你,这是一个糟糕的答案,实际上并没有解决你的问题,因为我无法弄清楚你的目标是什么。然而, 解释了你遇到的无限循环。
无限循环是while
,等待Queue a
为空,永远不会发生(除非a
在while
已经为空{1}}循环开始)。
通过while
循环的每次迭代都会从a
中对两个项目进行排队,然后对第一个项目进行排队。即使这是你想要的大多数迭代(我老实说也无法分辨),它应该是最后一个应该失败。
当a
只归结为一个元素时,while
循环开始永远重复这个无用的行为:
从Queue a
中删除唯一的元素。
从现在空的a
中删除另一个元素...不知何故。
打印上帝知道什么,然后是空格。
将“one and only”元素(实际存在的元素)直接放回a
。
测试a
是否为空,哪个---意外---它不是。
转到1.
宇宙热死。
一旦Queue a
被捕获,它将“始终”包含最后一个元素。 空的短暂时刻将仅发生在while
块的中间,而不会发生在同一块的 top 的迭代测试期间
其他奇怪
我在输入这个答案时想出了这些问题。他们是你应该问自己的问题:
您的计划的目标是什么? (这将是您将来提出的几乎任何Stack Overflow问题所必需的。它几乎没有这个问题,这就是为什么你收到这样一个不完整的答案。)
在空leave
上致电Queue
时会发生什么? (你的while
循环永远这样做。)为什么这是明显正确的事情呢?有哪些替代方案,为什么它们显然不正确?
什么是Queue temp
?它从来没有多个项目,为什么不能用局部变量替换呢?
为什么要打印丢弃的物品?或者:你为什么扔掉你打印的物品?是否将它们打印到控制台上你想要做什么?
任何与你的标题中的“第N个位置”有什么关系?
对于将来的问题,建议您查看帮助中心的“How do I ask a good question?”以及该文章底部的链接,尤其是Eric Lippert的“How To Debug Small Programs”。我怀疑你的代码可以从后者的“橡皮鸭调试”中受益匪浅:
使用简单的单词向鸭子解释为什么程序中每个方法的每一行显然是正确的。在某些时候,你将无法这样做,要么是因为你不了解你所写的方法,要么是因为它错了,或两者兼而有之。集中精力研究这种方法; 可能是错误的地方。
我认为鸭子会捕获很多这些。
答案 1 :(得分:0)
我相信程序中使用的方法不存在,即 .leave()
但是要使用队列从任何位置获取元素,则可以使用此
这里 n 是所需的位置 1
例如,如果您需要打印出位置 5 处的元素 n = 5-1,即 4 因为它遵循索引。
lighthouseci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
- run: yarn && sudo yarn global add @lhci/cli@0.6.x
- run: yarn build
- run: lhci autorun