如何将一行输入的数字正确赋值给数组?并修正给定的C#错误代码
修正C#数组赋值代码的解决方案
首先咱们来拆解一下你这段代码里的几个关键问题:
- 数组作用域错误:你在
for循环内部声明了int[] a,这意味着每次循环都会新建一个数组,循环结束后这个数组就被销毁了,根本没法保留住所有元素。 - 索引越界风险+逻辑错误:
Console.ReadLine().Split()得到的数组索引是从0开始的,但你的循环从i=1开始,会跳过第一个输入的数字;而且如果输入刚好是5个数字(像你示例里的情况),n的长度是5,最大索引是4,当i=5时访问n[5]会直接抛出索引越界异常。 - 类型不匹配+数组未初始化:你用
long.Parse得到的是long类型的值,却要赋值给int[]类型的数组;而且int[] a只是声明了数组变量,没有初始化它的长度,直接赋值会编译报错。
正确的实现代码
下面是修正后的完整代码,完全贴合你把输入数字分配给数组的需求:
// 读取输入并分割成字符串数组,同时过滤空元素(避免多空格导致的问题) string[] inputParts = Console.ReadLine().Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); // 初始化int数组,长度和输入的数字数量一致 int[] a = new int[inputParts.Length]; // 遍历字符串数组,转换为int后赋值给int数组 for (int i = 0; i < inputParts.Length; i++) { // 使用int.Parse转换为整数,也可以根据需求换成long.Parse并修改数组类型为long[] a[i] = int.Parse(inputParts[i]); } // 如果你示例中a[4]=10是需要手动修改的特殊逻辑,可在循环后单独设置 // a[4] = 10; // 测试输出(可选,验证赋值结果) Console.WriteLine("数组元素:"); for (int i = 0; i < a.Length; i++) { Console.WriteLine($"a[{i}] = {a[i]}"); }
代码说明
- 加入
StringSplitOptions.RemoveEmptyEntries可以处理输入中存在多个连续空格的情况,避免生成空字符串元素。 - 数组
a在循环外部声明并初始化长度,确保能存储所有输入的数字,且循环结束后可以正常使用。 - 循环从
i=0开始,对应输入的第一个数字,既不会遗漏元素,也不会出现索引越界的问题。 - 如果确实需要存储长整型数字,只需把数组类型改为
long[],转换方法换成long.Parse即可。
内容的提问来源于stack exchange,提问作者Tursunboy Avazbekov
相关产品推荐
相关产品推荐

