如何在C#中将用户输入存入数组并遍历?求助解决索引越界错误
问题分析与解决
错误原因
- 你初始化的数组是空数组(长度为0),数组一旦创建长度就固定,根本没有可写入的索引,执行
vet[i] = input必然触发IndexOutOfRangeException索引越界错误。 - for循环的条件
i != -1逻辑完全错误:i从0开始每次自增1,永远不可能等于-1,循环会无限跑下去,只会持续触发越界错误。 - 没有处理终止条件:你需要先读取输入,判断如果是-1就停止循环,而不是先让i自增再处理。
修正后的代码
用List<int>来动态存储输入(它可以自动扩容,适合不确定元素数量的场景),等输入结束后再转成数组,最后完成降序排序:
List<int> vetList = new List<int>(); while (true) { Console.WriteLine("请输入数值(输入-1停止):"); // 用int.TryParse避免输入非数字时程序崩溃 if (int.TryParse(Console.ReadLine(), out int input)) { if (input == -1) { break; // 输入-1,终止循环 } vetList.Add(input); // 将有效输入添加到列表 } else { Console.WriteLine("请输入有效的整数!"); } } // 转成数组(如果需要数组格式的话) int[] vet = vetList.ToArray(); // 降序排序 Array.Sort(vet); Array.Reverse(vet); // 输出排序后的结果 Console.WriteLine("降序排列后的结果:"); foreach (int num in vet) { Console.WriteLine(num); }
关键改进点
- 用
List<int>替代固定长度数组,解决动态添加元素的问题。 - 用
while(true)配合break控制循环终止逻辑,更直观清晰。 - 加入
int.TryParse做输入校验,避免用户输入非整数时程序崩溃。 - 补充了降序排序逻辑,完成你最初的需求。
内容的提问来源于stack exchange,提问作者user15391900
相关产品推荐
相关产品推荐

