第一个foreach方法会出现几个错误。我无法弄清楚为什么它似乎应该有用......
foreach - 类,结构或接口成员声明中的无效标记'foreach'。
打印出1 2 3 4 1 2 3 4 1 2 3 4.
第二种foreach方法。这是如何运作的?我认为它只是按顺序迭代每个第一个。混淆来自于它是相同的代码,但堆栈而不是队列。第二个foreach打印出4 3 2 1.这是为什么?
namespace Cards
{
class Class1
{
Queue numbers = new Queue();
foreach (int number in new int[4]{1,2,3,4})
{
numbers.Enqueue(number);
Console.WriteLine(number + " has joined the queue");
}
foreach (int number in numbers)
{
Console.WriteLine(number);
}
while(numbers.Count > 0)
{
int number = (int)numbers.Dequeue();
Console.WriteLine(number + " has left the queue");
}
}
}
答案 0 :(得分:3)
代码需要在方法中..
class Class1
{
public void DoQstuff()
{
Queue numbers = new Queue();
foreach (int number in new int[4]{1,2,3,4})
{
numbers.Enqueue(number);
Console.WriteLine(number + " has joined the queue");
}
foreach (int number in numbers)
{
Console.WriteLine(number);
}
while(numbers.Count > 0)
{
int number = (int)numbers.Dequeue();
Console.WriteLine(number + " has left the queue");
}
}
}
如果你运行它,整个过程会按预期工作
队列工作,先进先出.....所以1是第一位,所以它的第一次出局
堆栈工作,先进入,最后退出,所以1是第一件事,所以它将是最后一件事
就像,如果你排队在咖啡店服务,你必须排队等候直到轮到你排队的第一个人,这是第一个服务的人。
堆栈就像把书堆放在一起......你不能把第一件东西从堆栈中取出,直到你把所有的东西都堆在它上面。答案 1 :(得分:0)
堆栈不遵循与队列相同的启发式方法。在队列中,首先出现的是第一个。在堆栈中,您正在查看FILO(先入,后出)。
这就是为什么你看到相反的情况,即4,3,2,1。
答案 2 :(得分:0)
嘛!在第二个循环中,您尝试打印集合中的所有元素。 1)在Queue的情况下,对象在添加时存储。所以你得到了与你的第一个循环(FIFO)相同的答案 2)如果是Stack,对象将以相反的顺序存储,因此当您从集合中弹出对象时,可以删除最后插入的对象。 (LIFO)
希望这有帮助。