C#生成不同量级随机整数文件并读取到ArrayList的实现问题
排序算法测试代码问题排查与修复
存在的问题汇总
- 静态方法不能直接访问非静态的全局变量
List和FileName,运行会直接报错 - 调用
Randomgen方法时参数不匹配,方法要求传2个参数,你只传了1个,而且传入的List未初始化没有实际作用 - 逻辑和需求不符:
Randomgen里只把数据加入了内存列表,完全没有执行写入文件的操作,你创建的StreamWriter没有用到 - 类型使用混乱:同时混用
List<int>和ArrayList,还出现了不存在的Integers类,new Integers()属于无效代码,直接存int类型值即可 - 重复创建
Random实例:短时间内创建多个Random会因为种子相同生成大量重复随机数,影响测试结果 - IO资源未释放:
StreamWriter和StreamReader使用后没有关闭,会导致文件被占用无法正常读写 - 缺少读文件逻辑调用:代码全程没有调用
populateListFromFile方法,没有实现“写文件再读入列表”的测试流程 - 文件名未赋值:全程没有给
FileName赋值,程序不知道要读写哪个文件
修复后可运行代码
using System; using System.Collections.Generic; using System.IO; class SortTestProgram { // 全局仅初始化一个Random实例,避免生成重复随机数 private static readonly Random _random = new Random(); static void Main(string[] args) { Console.WriteLine("请选择要生成的列表规模:"); Console.WriteLine("1-小容量 2-中容量 3-大容量 4-超大容量"); // 增加输入合法性校验,避免非法输入导致崩溃 if (!int.TryParse(Console.ReadLine(), out int sizeChoice) || sizeChoice < 1 || sizeChoice > 4) { Console.WriteLine("输入无效,请输入1-4范围内的数字"); return; } // 根据选择匹配对应数据量和存储文件名 int dataCount; string fileName; switch (sizeChoice) { case 1: dataCount = 100; fileName = "small_data.txt"; break; case 2: dataCount = 2000; fileName = "medium_data.txt"; break; case 3: dataCount = 20000; fileName = "large_data.txt"; break; case 4: dataCount = 200000; fileName = "xlarge_data.txt"; break; default: return; } // 生成随机数写入目标文件 GenerateRandomDataToFile(dataCount, fileName); Console.WriteLine($"随机数据已成功写入文件:{fileName}"); // 从文件读取数据到列表,用于后续排序测试 List<int> testData = PopulateListFromFile(fileName); Console.WriteLine($"已从文件读取{testData.Count}条数据到内存列表,可开始执行排序效率测试"); // 此处添加你要测试的各类排序算法逻辑即可 } /// <summary> /// 生成指定数量的随机整数并写入文本文件 /// </summary> static void GenerateRandomDataToFile(int count, string fileName) { // using语句会自动释放StreamWriter资源,无需手动关闭,避免文件占用 using (StreamWriter sw = new StreamWriter(fileName)) { for (int i = 0; i < count; i++) { sw.WriteLine(_random.Next(1, int.MaxValue)); } } } /// <summary> /// 从指定文本文件读取所有整数存入List并返回 /// </summary> static List<int> PopulateListFromFile(string fileName) { List<int> result = new List<int>(); using (StreamReader sr = new StreamReader(fileName)) { while (!sr.EndOfStream) { if (int.TryParse(sr.ReadLine(), out int num)) { result.Add(num); } } } return result; } }
内容的提问来源于stack exchange,提问作者margiela
相关产品推荐
相关产品推荐

