【问题标题】:Why does my bool RemoveAll method only return false?为什么我的 bool RemoveAll 方法只返回 false?
【发布时间】:2016-09-18 14:28:53
【问题描述】:

我必须为堆栈创建一个 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();

【问题讨论】:

  • 什么是OurListNode&lt;T&gt; pTmp = mTop;,两个while 循环的中断条件是什么。您似乎只是在推送数据离子堆栈,将其弹出并清空堆栈
  • 两个while循环的中断条件应该是栈OurStack和tempStack的清空。然而,正如 MajkeloDev 指出的那样,该方法根本没有识别出任何数据正在被输入。我使用 pTmp 作为指向堆栈顶部的临时指针。因此,当我编写 pTmp = pTmp.Next 时,我试图将其从框架中弹出,分析其内容,然后将其完全从堆栈中删除或将其放入 tempStack 中,但这并没有发生,因为我从来没有真正让它超过while循环线。

标签: c# stack boolean


【解决方案1】:

问题是:

(OurStack.Count > 0)

(tempStack.Count > 0)

当函数启动时,您使用新对象初始化 OurStack 和 tempStack 将始终为 false,因此它将始终为空(除非您在 Stack 构造函数代码中添加某些内容):

Stack<T> OurStack = new Stack<T>();
Stack<T> tempStack = new Stack<T>();

所以那些列表永远是空的...

【讨论】:

  • 使用该方法时,我在添加到堆栈后调用它,并且第一个while语句不应该将数据推送到tempStack中吗?那么为什么列表仍然是空的呢?当我调试它时,它首先通过添加到列表的过程——所以我知道 OurStack 包含数据。但是你是对的,它将它们标识为空,因为它转到第一个 while 语句,然后到第二个语句,然后返回 ItemRemove 的原始值,它是 false。知道为什么吗?
  • @Stephanie 您将我的答案标记为正确。你现在明白了吗,还是想让我再给你解释一下?
  • 我可以在调试程序时看到你是对的——我只是不知道如何修复它——所以如果你有时间再解释一下,我会很感激的!
【解决方案2】:

也许这条线 - if (pTmp.Data.Equals(item)) 永远不会返回 true,因此永远不会切换布尔值。在那里打个断点看看。

【讨论】:

  • 这很奇怪;当我调试时,它会转到第一个 while 语句,然后跳转到下一个 while 语句,而无需遍历任何其他代码。我不知道它为什么这样做......
【解决方案3】:

OurStack 是变量名还是类型名?在 RemoveAll 方法中用作变量名,在测试方法中用作类型。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2015-02-04
    • 1970-01-01
    • 2015-01-09
    • 2021-12-20
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多