0
我似乎无法找到与我的代码的问题。可能是因为我太累了,但这使我疯狂。堆栈集合和循环
while循环的工作原理和遍历整个集合,并做它必须做的事情。 foreach循环也是如此,尽管我不确定创建列表副本是否值得考虑。
对于循环来说,A循环似乎是我继续前进的最佳选择,并在迭代时改变集合的值。
问题是,它总是会出现一个太短的集合中的所有条目。在循环结束时,meal.count将返回1。我究竟做错了什么?
namespace HFCSExercise_Lumberjack
{
class Lumberjack
{
public string Name { get; private set; }
private Stack<Flapjack> meal;
public Lumberjack(string name)
{
Name = name;
meal = new Stack<Flapjack>();
}
public int FlapjackCount
{
get
{
return meal.Count;
}
}
public void TakeFlapjacks(Flapjack food, int howMany)
{
for(int i = 0; i < howMany; i++)
{
meal.Push(food);
}
}
public void EatFlapjacks()
{
//while(meal.Count > 0)
//{
// Console.WriteLine("Ed ate a {0} flapjack", meal.Pop().ToString().ToLower());
//}
for (int i = 0; i <= meal.Count; i++)
{
Console.WriteLine("{0} ate a {1} flapjack", Name, meal.Pop().ToString().ToLower());
}
//foreach (Flapjack x in meal.ToList())
//{
// Console.WriteLine("{0} ate a {1} flapjack", Name, meal.Pop().ToString().ToLower());
//}
}
}
}
'Pop'修改堆栈的大小,使'meal.Count'减少,而'i'增加。如果你想像这样使用'for',你应该在迭代之前存储初始计数。尽管如此,我会使用'while(meal.Count> 0){..。}“。 – Lee 2015-03-24 23:14:57
您的for循环将无法按预期工作,因为'meal.Count'不是静态的 - 它会随着每个'Pop'操作而减少 – BrokenGlass 2015-03-24 23:15:05
这可以通过简单地通过for循环进行调试,同时观察meal.Count。 – 2015-03-24 23:20:49