C#控制台应用:数组创建、算法适配及代码错误修复求助
解决你的C#控制台应用问题
让我们一步步修复并完善你的代码,搞定所有提到的问题:
1. 修复RandomArray方法的返回值问题
原来的方法只生成了单个随机数,完全没返回数组,这就是报错的原因。我们改成生成一个随机长度的数组,每个元素都是随机整数,最后返回这个数组:
private static int[] RandomArray() { Random random = new Random(); // 随机生成数组长度(1到20之间) int length = random.Next(1, 21); int[] randomArr = new int[length]; for (int i = 0; i < length; i++) { // 每个元素生成1-100的随机整数 randomArr[i] = random.Next(1, 101); } Console.WriteLine($"已生成随机数组,长度为{length},元素为:"); Console.WriteLine(string.Join(", ", randomArr)); Console.ReadKey(); return randomArr; }
2. 实现UserDefinedArray方法
让用户自己输入数组长度和每个元素,同时增加输入校验,避免无效值:
private static int[] UserDefinedArray() { Console.Write("请输入自定义数组的长度:"); // 校验输入是否为正整数 if (!int.TryParse(Console.ReadLine(), out int length) || length <= 0) { Console.WriteLine("输入无效,请输入正整数!"); Console.ReadKey(); return UserDefinedArray(); // 让用户重新输入 } int[] userArr = new int[length]; for (int i = 0; i < length; i++) { Console.Write($"请输入第{i+1}个元素:"); // 循环校验直到输入有效整数 while (!int.TryParse(Console.ReadLine(), out userArr[i])) { Console.WriteLine("输入无效,请输入整数!"); Console.Write($"请重新输入第{i+1}个元素:"); } } Console.WriteLine("你的自定义数组已创建:"); Console.WriteLine(string.Join(", ", userArr)); Console.ReadKey(); return userArr; }
3. 修复PreDefinedArray的递归问题
原来的方法错误地递归调用自己,会导致栈溢出,直接返回预定义数组即可:
private static int[] PreDefinedArray() { int[] preDefinedArr = new int[6] {4, 8, 15, 16, 23, 42 }; Console.WriteLine("已选择预定义数组:"); Console.WriteLine(string.Join(", ", preDefinedArr)); Console.ReadKey(); return preDefinedArr; }
4. 重构算法类,适配用户选择的数组
求和算法(Sum类)
把原来的Main方法改成静态的Execute方法,接收数组参数:
namespace sum { class Sum { public static void Execute(int[] tab) { if (tab == null || tab.Length == 0) { Console.WriteLine("请先选择一个有效的数组!"); Console.ReadKey(); return; } int wynik = 0; foreach (int num in tab) { wynik += num; } Console.WriteLine($"Wynik sumy elementów ciągu wynosi: {wynik}"); Console.ReadKey(); } } }
求平均算法(Average类)
原来的逻辑是让用户重新输入数字,现在改成计算传入数组的平均值:
namespace AverageNums { class Average { public static void Execute(int[] tab) { if (tab == null || tab.Length == 0) { Console.WriteLine("请先选择一个有效的数组!"); Console.ReadKey(); return; } double suma = 0; foreach (int num in tab) { suma += num; } double srednia = suma / tab.Length; Console.WriteLine($"Średnia arytmetyczna elementów ciągu wynosi: {srednia:F2}"); Console.ReadKey(); } } }
5. 更新菜单逻辑,调用正确的算法
修改菜单的switch分支,增加数组检查,避免用户未选数组就执行算法:
case ConsoleKey.D4: Console.Clear(); if (tab != null) { sum.Sum.Execute(tab); } else { Console.WriteLine("请先选择一个数组!"); Console.ReadKey(); } break; case ConsoleKey.D5: Console.Clear(); if (tab != null) { long product = 1; foreach (int num in tab) { product *= num; } Console.WriteLine($"Iloczyn elementów ciągu wynosi: {product}"); Console.ReadKey(); } else { Console.WriteLine("请先选择一个数组!"); Console.ReadKey(); } break; case ConsoleKey.D6: Console.Clear(); if (tab != null) { AverageNums.Average.Execute(tab); } else { Console.WriteLine("请先选择一个数组!"); Console.ReadKey(); } break;
完整修正后的菜单类代码
namespace Menu { static class MenuProste { public static void StartMenuProste() { Console.Title = "Moje menu"; int[] tab = null; while (true) { Console.Clear(); Console.WriteLine(">>> Witaj! Wciśnij klawisz, aby wybrać algorytm! <<<"); Console.WriteLine("1- Wybierz zdefiniowany wcześniej ciąg."); Console.WriteLine("2- Zdefiniuj własny ciąg."); Console.WriteLine("3- Wybierz losowy ciąg."); Console.WriteLine("4- Suma elementów ciagu n-elementowego."); Console.WriteLine("5- Iloczyn elementów ciagu n-elementowego."); Console.WriteLine("6- Srednia arytmetyczna elementów ciagu n-elementowego."); Console.WriteLine("7- Wypisanie elementów ciagu Fibonacciego"); Console.WriteLine("8- Ile razy dany element podany na wejsciu wystepuje w danym ciagu n-elementowym. "); Console.WriteLine("9- Znajdowanie elementu najwiekszego (najmniejszego) w danym ciagu n-elementowy."); Console.WriteLine("0- Koniec"); ConsoleKeyInfo klawisz = Console.ReadKey(); switch (klawisz.Key) { case ConsoleKey.D1: Console.Clear(); tab = PreDefinedArray(); break; case ConsoleKey.D2: Console.Clear(); tab = UserDefinedArray(); break; case ConsoleKey.D3: Console.Clear(); tab = RandomArray(); break; case ConsoleKey.D4: Console.Clear(); if (tab != null) { sum.Sum.Execute(tab); } else { Console.WriteLine("请先选择一个数组!"); Console.ReadKey(); } break; case ConsoleKey.D5: Console.Clear(); if (tab != null) { long product = 1; foreach (int num in tab) { product *= num; } Console.WriteLine($"Iloczyn elementów ciągu wynosi: {product}"); Console.ReadKey(); } else { Console.WriteLine("请先选择一个数组!"); Console.ReadKey(); } break; case ConsoleKey.D6: Console.Clear(); if (tab != null) { AverageNums.Average.Execute(tab); } else { Console.WriteLine("请先选择一个数组!"); Console.ReadKey(); } break; case ConsoleKey.D7: case ConsoleKey.D8: case ConsoleKey.D9: Console.Clear(); opcjaWBudowie(); break; case ConsoleKey.Escape: case ConsoleKey.D0: Environment.Exit(0); break; default: break; } } } private static int[] RandomArray() { Random random = new Random(); int length = random.Next(1, 21); int[] randomArr = new int[length]; for (int i = 0; i < length; i++) { randomArr[i] = random.Next(1, 101); } Console.WriteLine($"已生成随机数组,长度为{length},元素为:"); Console.WriteLine(string.Join(", ", randomArr)); Console.ReadKey(); return randomArr; } private static int[] UserDefinedArray() { Console.Write("请输入自定义数组的长度:"); if (!int.TryParse(Console.ReadLine(), out int length) || length <= 0) { Console.WriteLine("输入无效,请输入正整数!"); Console.ReadKey(); return UserDefinedArray(); } int[] userArr = new int[length]; for (int i = 0; i < length; i++) { Console.Write($"请输入第{i+1}个元素:"); while (!int.TryParse(Console.ReadLine(), out userArr[i])) { Console.WriteLine("输入无效,请输入整数!"); Console.Write($"请重新输入第{i+1}个元素:"); } } Console.WriteLine("你的自定义数组已创建:"); Console.WriteLine(string.Join(", ", userArr)); Console.ReadKey(); return userArr; } private static int[] PreDefinedArray() { int[] preDefinedArr = new int[6] {4, 8, 15, 16, 23, 42 }; Console.WriteLine("已选择预定义数组:"); Console.WriteLine(string.Join(", ", preDefinedArr)); Console.ReadKey(); return preDefinedArr; } static void opcjaWBudowie() { Console.Write("Opcja w budowie!"); Console.ReadKey(); } } }
现在所有问题都解决了:
RandomArray正确返回随机数组,修复了返回值错误UserDefinedArray实现了用户自定义数组的功能- 求和、求平均算法现在接收用户选择的数组作为参数,不再依赖硬编码
- 菜单增加了数组检查,避免用户未选数组就执行算法的情况
内容的提问来源于stack exchange,提问作者DoktorAgon
相关产品推荐
相关产品推荐

