创建含整数列表的数组并按平均值排序输出,修复给定代码Bug
问题解决:按列表平均值排序并输出多列表数组
需求明确:创建存储多个List<int>的数组,计算每个列表的平均值,按平均值排序后输出所有列表。以下是针对原代码的Bug修复及完整逻辑补全:
核心Bug修复与逻辑补全
1. 修复PrintArray方法参数类型错误
原方法参数定义为List<int> listArray,但实际传入的是List<int>[]数组,导致遍历listArray[i]时得到int类型,无法用foreach遍历。需将参数改为List<int>[] listArray,同时简化循环逻辑,无需单独传入size。
2. 修复输入解析格式错误问题
直接使用Int32.Parse会在输入包含空字符串(如连续空格)或非数字字符时抛出异常,改用Int32.TryParse验证转换,同时用StringSplitOptions.RemoveEmptyEntries过滤拆分后的空项,避免无效输入干扰。
3. 补全按平均值排序的逻辑
使用LINQ的OrderBy方法,基于每个列表的平均值排序,同时处理空列表的边界情况(避免除以0异常)。
完整修正代码
using System; using System.Collections.Generic; using System.Linq; class Solution { public static void PrintArray(List<int>[] listArray) { foreach (var list in listArray) { // 用空格分隔输出当前列表的所有元素 Console.WriteLine(string.Join(" ", list)); } } public static void Main() { // 验证输入的列表数量有效性 if (!int.TryParse(Console.ReadLine(), out int size) || size <= 0) { Console.WriteLine("请输入有效的正整数作为列表数量"); return; } List<int>[] listArray = new List<int>[size]; for (int i = 0; i < size; i++) { string line = Console.ReadLine(); // 拆分输入并自动移除空字符串 string[] data = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); List<int> list = new List<int>(); foreach (string s in data) { // 仅转换有效的数字字符串 if (int.TryParse(s, out int value)) { list.Add(value); } } // 直接将列表赋值给数组元素,无需额外复制操作 listArray[i] = list; } // 按列表平均值排序,空列表默认平均值为0 var sortedArray = listArray.OrderBy(list => list.Count == 0 ? 0 : list.Average() ).ToArray(); // 输出排序结果 Console.WriteLine("排序后的列表:"); PrintArray(sortedArray); } }
关键说明
- 参数类型修正:确保
PrintArray方法能正确接收并遍历List<int>[]数组。 - 输入安全处理:通过双重验证避免输入格式错误导致的程序崩溃。
- 排序逻辑:结合LINQ实现简洁的平均值排序,同时处理空列表的边界场景。
- 代码简化:移除不必要的列表复制与清空操作,直接赋值提升效率。
内容的提问来源于stack exchange,提问作者Hưng Nguyễn
相关产品推荐
相关产品推荐

