如何使队列中的所有值出队?在下面的代码中,当我尝试这样做时,循环在中间停止。我不明白。
Queue<int> integers = new Queue<int>();
for (int i = 0; i < 20; i++)
{
integers.Enqueue(i);
}
Console.WriteLine(integers.Count); // 20
Console.WriteLine();
for (int i = 0; i < integers.Count; i++)
{
Console.WriteLine(integers.Dequeue()); // Stops at 10
}
Console.WriteLine();
Console.WriteLine(integers.Count); // 10
答案 0 :(得分:10)
每次出队,您的integers.Count
都会减少,因此,在for
循环进行十次迭代后,循环次数将为10,因此循环将退出。
为了使代码正常工作,只需在循环之前保存队列的长度,如下所示:
var length = integers.Count;
for (int i = 0; i < length; i++)
{
Console.WriteLine(integers.Dequeue());
}
编辑:上述解决方案是对OP代码的最小改动。根据评论(和其他答案)中的建议,通常建议对此类任务建议使用while
循环:
while (integers.Count != 0) {
Console.WriteLine(integers.Dequeue());
}
答案 1 :(得分:2)
只需将循环更改为:
while(integers.Count > 0) { Console.WriteLine(integers.Dequeue()); }
答案 2 :(得分:2)
出队时,您正在从队列中删除项目。
尝试一下:https://dotnetfiddle.net/FbXgoA
Queue<int> integers = new Queue<int>();
for (int i = 0; i < 20; i++)
{
integers.Enqueue(i);
}
Console.WriteLine(integers.Count); // 20
Console.WriteLine();
while(integers.Count > 0)
{
Console.WriteLine(integers.Count + ": " + integers.Dequeue());
}
Console.WriteLine();
Console.WriteLine(integers.Count); // 0
答案 3 :(得分:1)
问题在于,当您使整数出列时,integers.Count也将同时更新。
因此,在队列中间,i = 10以及整数。Count= 10,因此for循环退出。
尝试一下:
while (integers.Count > 0)
{
Console.WriteLine(integers.Dequeue());
}