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

C#数组反转程序运行时出现Index outside of array错误求助

解决C#数组反转的索引越界问题

嘿,我来帮你搞定这个数组越界的问题!咱们一步步来看:

问题根源分析

你的代码里有两个关键错误导致了“Index outside of array”异常:

  • 循环条件完全写错了:你写的for (int i = nums.Length - 1; i<=nums.Length; i--)完全不符合数组索引的规则。数组的合法索引范围是0到nums.Length-1,当i从nums.Length-1开始递减,很快会变成-1,但i<=nums.Length这个条件依然成立,循环会继续执行,此时访问reversed[-1]就会直接触发索引越界异常。正确的终止条件应该是i >= 0,确保只在合法索引范围内循环。

  • 反转逻辑根本没生效:当前代码里reversed[i] = nums[i]只是把原数组元素复制到新数组的同一索引位置,根本没有实现反转效果。要反转数组,需要把原数组的末尾元素对应放到新数组的开头,比如原数组索引为i的元素,应该放到新数组的nums.Length - 1 - i位置。

修正后的手动循环代码

这是修复了两个问题后的完整代码,适合你学习数组基础逻辑:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        // 读取输入并转换为int数组
        int[] nums = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
        int[] reversed = new int[nums.Length];
        
        // 修正循环条件和反转逻辑
        for (int i = nums.Length - 1; i >= 0; i--)
        {
            // 原数组末尾元素对应新数组开头,计算对应索引
            reversed[nums.Length - 1 - i] = nums[i];
        }
        
        // 输出反转后的数组(用空格分隔)
        Console.WriteLine(string.Join(" ", reversed));
    }
}

更简洁的Linq实现(可选)

如果只是需要快速实现反转,C#的Linq库提供了现成的Reverse()方法,代码会更简洁:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        int[] nums = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
        int[] reversed = nums.Reverse().ToArray();
        Console.WriteLine(string.Join(" ", reversed));
    }
}

不过如果你正在学习数组基础知识,建议先掌握手动循环的写法,能更深入理解数组索引的工作原理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:55