C#数组插入超过5个元素触发IndexOutOfRange异常原因求解
问题根因
- C# 中的数组是固定长度容器,初始化完成后长度无法修改
- 代码中在接收用户输入的长度之前,就已经将数组初始化为固定长度5:
int[] array = new int[5]; - 当输入的quant值大于5时,循环变量i会取到5及以上的数值,而长度为5的数组合法索引范围仅为0~4,访问
array[5]就会触发IndexOutOfRange异常 - 额外注意:你最后一行输出代码的占位符写法有误,
Console.WriteLine("\n", array[i]);不会打印出数组元素值,需要调整为带占位符的写法。
修复方案
方案1:先读取长度再初始化数组
将数组初始化逻辑移到读取quant之后即可适配输入的长度:
class Program { static void Main(string[] args) { Console.WriteLine("Declare the array size");// 输入6 int quant = int.Parse(Console.ReadLine()); // 拿到用户输入的长度后再初始化数组 int[] array = new int[quant]; for (int i = 0; i < quant; i++) { Console.WriteLine("Fill in the {0}º value ", i+1); int number = int.Parse(Console.ReadLine()); array[i] = number; } for (int i=0; i< quant; i++) { Console.WriteLine(array[i]); } } }
方案2:使用可变长度的List<int>替代数组
如果需要后续动态增减元素,使用List<int>更灵活,无需提前指定长度:
class Program { static void Main(string[] args) { List<int> numList = new List<int>(); Console.WriteLine("Declare the array size");// 输入6 int quant = int.Parse(Console.ReadLine()); for (int i = 0; i < quant; i++) { Console.WriteLine("Fill in the {0}º value ", i+1); int number = int.Parse(Console.ReadLine()); numList.Add(number); } foreach (int num in numList) { Console.WriteLine(num); } } }
内容的提问来源于stack exchange,提问作者Lourence Queiróz Fófano
相关产品推荐
相关产品推荐

