如何正确显示C#函数返回的Double类型数组?解决输出异常问题
问题分析与修复方案
首先,你的代码遇到两个核心问题:函数内部逻辑错误导致返回的数组内容不符合预期,以及直接打印数组会输出类型名而非实际元素。咱们一步步来修复:
一、修复findNum函数的逻辑错误
你的函数里有几个关键问题需要调整:
1. 初始化min和max的方式错误
用default(double)初始化会得到0,但如果数组里全是负数,这个初始值会导致max永远是0,完全不对。正确的做法是用数组的第一个元素来初始化min和max:
double min = arr[0]; double max = arr[0];
(如果需要处理空数组的边界情况,可以先加判断:if (arr == null || arr.Length == 0) throw new ArgumentException("数组不能为空");)
2. 循环遍历的范围与逻辑优化
你写的for (int i = 0; i < arr.Length - 1; i++)虽然能覆盖所有元素,但写法绕了一圈。更直观的是直接遍历每个元素,还可以用Math.Max/Math.Min让逻辑更清晰:
for (int i = 1; i < arr.Length; i++) { max = Math.Max(max, arr[i]); min = Math.Min(min, arr[i]); }
3. 数组赋值错误:Append方法不修改原数组
C#的数组是固定长度的,Append()方法返回的是一个新的IEnumerable<double>,不会改变原来的数组。你原来的array.Append(max)根本没把值放进数组里,数组还是默认的[0,0]。正确的做法是直接赋值或者创建新数组:
// 方式1:直接给固定长度数组赋值 double[] array = new double[2]; array[0] = max; array[1] = min; // 方式2:更简洁的写法 double[] array = new double[] { max, min };
4. 移除多余的循环代码
你最后那段循环完全没用,还可能干扰值,直接删掉就行:
// 删掉这段无效代码 for (int x = 0; x < array.Length; x++) { min = min < max ? min : max; }
二、修复控制台输出的问题
直接Console.WriteLine(findNum(...))会调用数组的ToString()方法,而数组默认的ToString()返回的是类型名System.Double[]。要输出数组的实际元素,需要用string.Join拼接元素:
Console.WriteLine(string.Join(", ", findNum(new double[] {1, 2, 3, 4, 5})));
完整修复后的代码
class Program { public static double[] findNum(double[] arr) { // 处理空数组的边界情况 if (arr == null || arr.Length == 0) { throw new ArgumentException("输入的数组不能为空"); } double min = arr[0]; double max = arr[0]; for (int i = 1; i < arr.Length; i++) { max = Math.Max(max, arr[i]); min = Math.Min(min, arr[i]); } return new double[] { max, min }; } static void Main(string[] args) { double[] result = findNum(new double[] { 1, 2, 3, 4, 5 }); // 两种输出方式任选其一 Console.WriteLine($"最大值: {result[0]}, 最小值: {result[1]}"); Console.WriteLine(string.Join(", ", result)); } }
运行结果
现在运行代码会输出:
最大值: 5, 最小值: 1 5, 1
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

