C#中接收多维数组的方法调用报错,求问题原因排查
问题分析与修复方案
你的代码里有两个关键问题导致运行错误,我来逐一拆解:
1. 结果数组初始化错误
在FindLargest方法中,你把Larges初始化成了一个长度为0的空数组:
double[] Larges = new double[] {};
之后尝试通过Larges[i] = Nums.Max();给数组元素赋值时,会直接抛出IndexOutOfRangeException——因为数组根本没有预留足够的位置来存储每个子数组的最大值。
修复方式:
根据输入交错数组的长度提前初始化结果数组:
double[] Larges = new double[NumsInNums.Length];
2. 交错数组的初始化语法错误
在Main方法调用FindLargest时,你用了{{4, 2, 7, 1}, {20, 70, 40, 90}, {1, 2, 0}}这种写法,这不符合C#中**交错数组(Jagged Array)**的初始化规则。交错数组本质是"数组的数组",每个子数组都需要显式声明为double[]类型。
修复方式:
修正调用时的数组初始化语法:
double[] nums = FindLargest( new double[][] { new double[] {4, 2, 7, 1}, new double[] {20, 70, 40, 90}, new double[] {1, 2, 0} } );
完整修复后的代码
using System; using System.Linq; // 需要引入Linq才能使用Nums.Max()方法 class Program { static double[] FindLargest(double[][] NumsInNums) { // 提前根据输入长度初始化结果数组 double[] Larges = new double[NumsInNums.Length]; int i = 0; foreach (double[] Nums in NumsInNums) { Larges[i] = Nums.Max(); i++; } return Larges; } static void Main(string[] args) { // 修正交错数组初始化语法 double[] nums = FindLargest(new double[][] { new double[] {4, 2, 7, 1}, new double[] {20, 70, 40, 90}, new double[] {1, 2, 0} }); foreach (double num in nums) { Console.WriteLine(num); } } }
另外补充一点:如果你的项目没有默认引入Linq,记得在代码顶部加上using System.Linq;,否则Nums.Max()方法会编译报错。
内容的提问来源于stack exchange,提问作者user13810842
相关产品推荐
相关产品推荐

