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

C# 实现查找二维矩阵行内连续相同元素的方法咨询

问题分析与修复方案

现有代码存在的问题

  • 索引越界风险:内层循环终止条件设置错误,当item遍历到当前行最后一个元素时,playingField[row, item+1]会超出数组下标范围,直接抛出IndexOutOfRangeException异常
  • 计数器逻辑错误:counter是全局声明的,遍历完一行后没有重置,跨行的相同元素会被错误累加,导致计数结果完全不符合预期
  • 匹配判断逻辑滞后:只有在整个二维矩阵遍历完成后才判断计数是否达标,不仅无法提前终止遍历优化性能,也无法正确识别每一行的连续匹配场景

修正后的实现代码

bool ScoreRowPresent(RegularCandies[,] playingField)
{
    // 提前校验边界,避免空数组/列数不足的情况
    int rowCount = playingField.GetLength(0);
    int colCount = playingField.GetLength(1);
    if (rowCount == 0 || colCount < 3) 
    {
        return false;
    }

    for (int row = 0; row < rowCount; row++)
    {
        // 每行遍历前重置计数器
        int counter = 1;
        // 只遍历到倒数第二个元素,避免下标越界
        for (int item = 0; item < colCount - 1; item++)
        {
            int currentCandyValue = (int)playingField[row, item];
            int nextCandyValue = (int)playingField[row, item + 1];

            if (currentCandyValue == nextCandyValue)
            {
                counter++;
                // 只要达到连续3个就直接返回结果,无需继续遍历
                if (counter >= 3)
                {
                    return true;
                }
            }
            else
            {
                // 元素不相等就重置计数器
                counter = 1;
            }
        }
    }
    // 所有行遍历完未找到符合条件的连续元素
    return false;
}

核心修改说明

  • 新增前置边界校验:如果列数小于3,不可能出现连续3个相同元素,直接返回false,避免无效遍历
  • 计数器作用域调整:移到行遍历逻辑内部,每行遍历开始时重置计数器,避免跨行计数错误
  • 修正循环终止条件:item < colCount - 1保证不会访问到超出列范围的下标,彻底解决越界问题
  • 新增不匹配重置逻辑:相邻元素不相等时直接重置计数器,保证计数始终对应当前连续相同元素的数量
  • 匹配达标后提前返回:只要找到任意一行有连续3个相同元素就直接返回true,大幅提升遍历效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:06