C#中调用归并排序类出现控制台黑屏问题求助
问题诊断与修复方案
嘿,我看了你的代码,黑屏的问题其实是两个小细节导致的,咱们快速解决:
1. 缺失关键方法导致运行异常
你的Program类里调用了generateRandomSequence和OutputSequence,但没写这两个方法的实现!程序执行到这里直接崩溃,加上之前调用了Console.Clear()清空了屏幕,就表现成黑屏了。
先补上这俩方法的实现,直接加在Program类里就行:
// 生成指定数量和范围的随机数数组 static int[] generateRandomSequence(int count, int maxValue) { Random random = new Random(); int[] sequence = new int[count]; for (int i = 0; i < count; i++) { sequence[i] = random.Next(0, maxValue + 1); // 让最大值也能被取到 } return sequence; } // 输出数组内容到控制台 static void OutputSequence(int[] sequence) { foreach (int num in sequence) { Console.Write(num + " "); } }
2. 过早清屏造成的视觉误解
你在获取完用户输入后立刻调用了Console.Clear(),这会把输入界面直接清空,之后程序在排序的时候屏幕是空白的——如果生成的随机数数量多,排序耗时久,就会让你觉得是黑屏卡住了。
建议调整Console.Clear()的位置,或者在排序前加个提示,让用户知道程序在运行:
Console.Write("How Many Random Numbers Would you like to Generate : "); int n = Convert.ToInt32(Console.ReadLine()); Console.Write("What is the Maximum Random Number Would you like to Generate : "); int max = Convert.ToInt32(Console.ReadLine()); // 加个提示,替代过早的清屏 Console.WriteLine("\n正在排序,请稍候..."); int[] unsortedSequence = generateRandomSequence(n, max); MergeSort mergeSortEngine = new MergeSort(); int[] mergeSortedArray = mergeSortEngine.Sort(unsortedSequence); // 现在再清屏,准备输出结果 Console.Clear(); Console.Write("归并排序结果: \n\n"); OutputSequence(mergeSortedArray); Console.WriteLine("\n\n按下任意键继续..."); Console.ReadKey(); Console.Clear();
额外的小优化
- 你的
merge方法是静态的,Sort方法却不是,其实可以把Sort也改成静态方法,这样调用的时候不用实例化对象,直接写MergeSort.Sort(unsortedSequence)就行,更简洁。 - 给用户输入加个合法性判断,避免输入非数字或者负数导致程序崩溃:
int n; Console.Write("How Many Random Numbers Would you like to Generate : "); while (!int.TryParse(Console.ReadLine(), out n) || n <= 0) { Console.Write("请输入有效的正整数: "); }
把这些改完之后,程序就能正常运行,不会再出现黑屏的问题啦。
内容的提问来源于stack exchange,提问作者finsters
相关产品推荐
相关产品推荐

