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

C#实现二维矩阵行回文校验触发索引越界异常问题求解

二维数组逐行回文判断索引越界问题解决方案

问题根因

  • 行、列索引用法混淆:判断单行回文时行号固定,仅需对比同一行内对称位置的列元素,原有逻辑错误地将行号、列号的计算逻辑搞反
  • 索引越界直接诱因:
    • 行索引计算错误:arr.GetLength(1)是二维数组的列数,用列数减去行号i得到的结果最大等于n,而二维数组行索引的最大值是n-1,当i=0时直接取到行索引n触发越界
    • 列索引计算错误:内层循环j从0开始,首次循环就会取j-1 = -1,列索引为负直接越界
  • 回文判断逻辑偏离一维基准:原有一维回文逻辑是对比索引i和长度 - i -1的元素,适配二维时应该对同一行的列索引做对称计算,而非修改行索引
  • 输出逻辑写反:flag置为1的触发条件是检测到非对称元素,代表存在行不是回文,原有代码的输出提示和实际逻辑相反

修正方案

将校验和输出部分的代码替换为以下逻辑即可:

int flag = 0;
// 遍历每一行
for (int i = 0; i < arr.GetLength(0); i++)
{
    int rowLength = arr.GetLength(1);
    // 遍历到行的一半即可完成回文校验
    for (int j = 0; j < rowLength / 2; j++)
    {
        // 同一行i下,对比列j和列 rowLength - j - 1的元素
        if (arr[i, j] != arr[i, rowLength - j - 1])
        {
            Console.WriteLine(i);
            flag = 1;
            break;
        }
    }
    if (flag == 1) break; // 只要有一行不是回文就可以提前终止校验
}
if (flag == 1)
{
    Console.WriteLine("not pali");
}
else
{
    Console.WriteLine("pali");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:06:02