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

数组索引越界错误排查及未来规避方法求助

问题排查与解决方案

直接触发索引越界的核心错误

你代码里的内层for循环条件写错了:

for (int j = 0; i < a.GetLength(1); j++)

这里错误地将循环终止条件写成了i < a.GetLength(1),而正确的应该是j < a.GetLength(1)。这个错误会让j无限制递增——只要当前的i小于数组列数,循环就不会停止,直到j超过二维数组的列索引范围,或者超过当前输入行分割后的nums数组长度,直接触发索引越界异常。

修复方法很简单,把内层循环条件改成:

for (int j = 0; j < a.GetLength(1); j++)

其他潜在风险及规避方案

除了上述核心错误,还有几个场景也会引发同类异常,需要提前处理:

  • 第一行输入不足3个数字:如果用户输入的第一行分割后元素数量少于3,访问nums[0]/nums[1]/nums[2]会直接越界。
  • 每行输入的数字数量不等于列数n:比如定义了n=3,但某行只输入了2个数字,nums[j]会因索引超出范围报错。
  • 输入包含非数字内容:int.Parse会抛出格式异常,虽然不是索引越界,但也是常见的输入类问题。

对应的规避方案:

  • 添加输入长度校验:在访问数组元素前,先判断数组长度是否符合要求。例如第一行输入后:
    string[] nums = line.Split();
    if (nums.Length < 3)
    {
        Console.WriteLine("输入格式错误,请输入3个数字");
        return;
    }
    
    内层循环前也可以做类似校验:
    string[] nums = Console.ReadLine().Split();
    if (nums.Length < a.GetLength(1))
    {
        Console.WriteLine($"输入格式错误,请输入{a.GetLength(1)}个数字");
        return;
    }
    
  • 使用安全的数字转换方法:用int.TryParse替代int.Parse,避免格式异常:
    if (!int.TryParse(nums[j], out int value))
    {
        Console.WriteLine($"第{i+1}行第{j+1}个输入不是有效数字");
        return;
    }
    a[i, j] = value;
    
  • 严格匹配循环边界与数组范围:始终确保循环变量的终止条件对应数组的实际长度,比如外层循环用i < a.GetLength(0)(行数),内层用j < a.GetLength(1)(列数),杜绝变量混用的低级错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:26