C#问题:控制台获取整数数组后无法正确输出数组值
问题分析
- 索引越界异常:
numbers函数硬编码循环10次,但后续调用传入的数组长度为1到9,远小于10,执行时会直接抛出IndexOutOfRangeException。 - 数组输出无效:直接用
Console.WriteLine输出数组对象,C#默认会打印数组的类型标识(如System.Int32[]),而非数组内的元素值。 - 输入数据未留存:首次调用
numbers(new int[10]);没有保存返回结果,输入的数值直接丢失,无法使用。
修复后的代码
Console.WriteLine("Function get numbers..."); static int[] GetNumbers(int[] values) { for (int ind = 0; ind < values.Length; ind++) { Console.WriteLine($"Type number {ind + 1}: "); values[ind] = int.Parse(Console.ReadLine()); } return values; } // 首次调用并保存输入的数组 int[] firstArray = GetNumbers(new int[10]); // 打印首次输入的数组元素 Console.WriteLine("\nFirst array values:"); PrintArray(firstArray); // 循环创建不同长度的数组并输出内容 for (int s = 1; s < 10; s++) { Console.WriteLine($"\nCreating array of length {s}:"); int[] currentArray = GetNumbers(new int[s]); Console.WriteLine("Array values:"); PrintArray(currentArray); } // 辅助方法:打印数组元素 static void PrintArray(int[] array) { Console.WriteLine(string.Join(", ", array)); }
修改说明
- 适配数组长度:将循环条件从固定的
ind < 10改为ind < values.Length,让函数能处理任意长度的输入数组,彻底避免索引越界。 - 正确输出数组:新增
PrintArray方法,用string.Join将数组元素拼接为可读的字符串,解决直接打印数组无意义的问题。 - 留存输入数据:保存每次调用
GetNumbers的返回值,确保输入的数值可以被后续逻辑使用。 - 优化用户提示:调整控制台输出的提示文本,让用户清楚当前需要输入的是第几个数字,以及当前处理的数组长度,提升交互体验。
- 规范命名:将函数名改为
GetNumbers,符合C# PascalCase的命名规范,增强代码可读性。
内容的提问来源于stack exchange,提问作者Patrick Boni
相关产品推荐
相关产品推荐

