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
相关产品推荐
相关产品推荐

