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

C#实现二维数组Zero Padding及现有代码越界错误解决求助

问题原因

你的代码出现数组越界主要有以下几个问题:

  • 二维数组维度搞反:C#中int[,] arr = new int[行数, 列数],GetLength(0)获取的是行数(对应y轴遍历的上限),GetLength(1)获取的是列数(对应x轴遍历的上限),你的代码里把两个值的使用场景完全搞反了。
  • 循环边界错误:外层遍历y的上限用了原数组的列数,根本没有遍历完新数组的所有行。
  • 边界判断越界:数组下标从0开始,合法的最大下标是长度-1,你直接判断y == ArrayZeroPad.GetLength(1),这个值本身已经超出数组下标的合法范围。
  • 原数组取值没有做偏移处理:新数组中从下标1开始才对应原数组的内容,你直接用新数组的x、y下标取原数组的值,也会出现越界。

修正后的可运行代码

using System;

class Program
{
    static void Main()
    {
        // 原数组
        int[,] originalArray = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
        
        // 新数组行列数各加2,因为上下左右各加一圈0
        int padRows = originalArray.GetLength(0) + 2;
        int padCols = originalArray.GetLength(1) + 2;
        int[,] arrayZeroPad = new int[padRows, padCols];

        // 遍历新数组的每一行
        for (int y = 0; y < padRows; y++)
        {
            // 遍历新数组的每一列
            for (int x = 0; x < padCols; x++)
            {
                // 如果是第一行、最后一行、第一列、最后一列,赋值为0
                if (y == 0 || y == padRows - 1 || x == 0 || x == padCols - 1)
                {
                    arrayZeroPad[y, x] = 0;
                }
                // 其余位置对应原数组的内容,原数组下标要减1,去掉边框的偏移
                else
                {
                    arrayZeroPad[y, x] = originalArray[y - 1, x - 1];
                }
            }
        }

        // 输出结果
        for (int y = 0; y < padRows; y++)
        {
            for (int x = 0; x < padCols; x++)
            {
                Console.Write(arrayZeroPad[y, x] + " ");
            }
            Console.WriteLine();
        }
        Console.ReadLine();
    }
}

代码说明

  • 初始化新数组的时候先单独定义行列变量,避免后续重复调用GetLength出错,也更容易理解。
  • 因为int类型的默认值就是0,其实你甚至不需要单独给边框赋值,只要把中间对应原数组的位置赋值即可,上面的写法是为了更直观符合你的逻辑。
  • 原数组的坐标和新数组的坐标偏移差1,所以取原数组值的时候要用新数组的下标减1,避免越界。
  • 输出部分去掉了多余的换行和每次行结束的ReadLine,只在全部输出完成后等待输入。

运行后输出结果如下:

0 0 0 0 0 
0 1 2 3 0 
0 4 5 6 0 
0 7 8 9 0 
0 0 0 0 0 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:06:04