我必须为堆栈创建一个RemoveAll方法,该方法取出所有特定值,然后将其他值返回到原始堆栈。然而,我写的方法只返回false。我的代码中有什么错误?
这是我写的方法:
public bool RemoveAll(T item)
{
Stack<T> OurStack = new Stack<T>();
Stack<T> tempStack = new Stack<T>();
bool itemRemove = false;
OurListNode<T> pTmp = mTop;
while (OurStack.Count > 0)
{
if (pTmp.Data.Equals(item))
{
itemRemove = true;
pTmp = pTmp.Next;
}
else
{
tempStack.Push(pTmp.Data);
}
}
while (tempStack.Count > 0)
{
pTmp = pTmp.Next;
OurStack.Push(pTmp.Data);
}
return itemRemove;
}
这是我为测试方法而写的主要内容:
static void Main()
{
OurStack<int> nums = new OurStack<int>();
nums.Push(1);
nums.Push(31);
nums.Push(22);
nums.Push(3);
//nums.RemoveAll(31);
Console.Write(nums.RemoveAll(1));
Console.ReadKey();
答案 0 :(得分:2)
问题在于:
(OurStack.Count&gt; 0)
和
(tempStack.Count&gt; 0)
总是假的,因为当函数启动时你用新对象初始化OurStack和tempStack所以它总是为空(除非你在Stack构造函数代码中添加一些东西):
Stack<T> OurStack = new Stack<T>();
Stack<T> tempStack = new Stack<T>();
所以那些列表总是空的......
答案 1 :(得分:0)
也许行 - if(pTmp.Data.Equals(item))永远不会返回true,从而永远不会切换bool。在那里设一个断点来看。
答案 2 :(得分:0)
OurStack 是变量或类型的名称吗?在RemoveAll方法中,它用作变量名,在测试方法中,它用作类型。