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