You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

比较两个栈是否相同的函数始终返回false,求排查解决

解决栈比较函数始终返回false的问题

你的函数始终返回false,大概率是栈转数组后的元素顺序不符合比较预期,或者栈的实际内容和你预想的不一样。下面是具体的排查和修复方案:

问题分析

.NET中Stack<T>.ToArray()方法返回的数组是从栈底到栈顶的元素顺序,而栈的逻辑顺序是后进先出(栈顶元素是最后入栈的)。如果你的预期是比较栈顶到栈底的元素顺序是否一致,直接用数组正序比较就会出错;另外也有可能你没正确查看栈的实际内容,导致误以为两个栈元素相同,实际却存在差异。

修复方案

方案1:反转数组后再比较

如果要按栈顶到栈底的顺序对比元素,反转数组后再进行比较:

public bool Check_Winner()
{
    int[] tower3Array = ui.tower3.ToArray();
    int[] tower4Array = ui.tower4.ToArray();

    if (tower3Array.Length != tower4Array.Length)
    {
         return false;
    }

    // 反转数组,转为栈顶到栈底的顺序
    Array.Reverse(tower3Array);
    Array.Reverse(tower4Array);

    for (int i = 0; i < tower3Array.Length; i++)
    {
        if (tower3Array[i] != tower4Array[i])
        {
            return false;
        }
    }

    return true;
}

方案2:直接遍历栈迭代器(更可靠)

栈的迭代器默认是从栈顶到栈底遍历元素,直接用迭代器对比能避免数组转换的顺序问题:

public bool Check_Winner()
{
    if (ui.tower3.Count != ui.tower4.Count)
        return false;

    using var tower3Enumerator = ui.tower3.GetEnumerator();
    using var tower4Enumerator = ui.tower4.GetEnumerator();

    while (tower3Enumerator.MoveNext() && tower4Enumerator.MoveNext())
    {
        if (tower3Enumerator.Current != tower4Enumerator.Current)
            return false;
    }

    return true;
}

排查步骤

  1. 检查栈的元素数量:在函数开头输出ui.tower3.Count和ui.tower4.Count,确认两者是否一致,不一致的话函数会直接返回false。
  2. 查看数组实际内容:在转数组后,输出两个数组的所有元素,确认是否和你预期的元素顺序、内容一致。
  3. 确认栈的类型实现:如果ui.tower3和ui.tower4是自定义栈而非.NET内置Stack<T>,要检查其ToArray()方法的返回顺序是否符合逻辑。

内容的提问来源于stack exchange,提问作者Arzoo Niaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:24:57