如何实现用户输入int数组并求最大值?程序运行崩溃求助
问题分析与修复方案
嘿,我一眼就揪出你程序崩溃的核心问题啦!
问题根源
你现在的代码逻辑顺序完全搞反了:
- 一开始你把
arrSize初始化为0,紧接着创建了一个长度为0的空数组list - 之后才读取用户输入的
arrSize,但这时候数组的长度已经固定死是0了! - 后面的for循环试图往
list[j]里赋值,这必然会触发索引越界异常(数组根本没有可存储元素的位置),直接导致程序崩溃。 - 另外你用
Convert.ToInt32和int.Parse的时候,如果用户输入的不是合法整数,也会抛出异常,这也是潜在的崩溃隐患。
修复后的代码
我帮你调整了逻辑顺序,还加上了输入验证,让程序更健壮:
public int Maximum() { int arrSize = 0; // 先获取合法的数组大小 while (true) { Console.Write("How many numbers do you want to find the max between? "); // 用int.TryParse验证输入,避免转换失败异常 if (int.TryParse(Console.ReadLine(), out arrSize) && arrSize > 0) { break; } Console.WriteLine("Please enter a valid positive integer!"); } // 现在根据用户输入的大小创建数组 int[] list = new int[arrSize]; Console.WriteLine("\nPlease enter the list of numbers: "); for (int j = 0; j < arrSize; j++) { // 同样验证每个数字的输入 int num; while (true) { Console.Write($"Enter number {j + 1}: "); if (int.TryParse(Console.ReadLine(), out num)) { break; } Console.WriteLine("That's not a valid integer, try again!"); } list[j] = num; } // 找最大值 int max = list[0]; for (int i = 1; i < arrSize; i++) { if (list[i] > max) { max = list[i]; } } return max; }
关键修改点
- 调整数组创建顺序:先获取用户输入的
arrSize,再创建对应长度的数组,这样数组才有足够的空间存储元素 - 添加输入验证:用
int.TryParse替代Convert.ToInt32和int.Parse,可以捕获用户输入的无效内容,避免程序崩溃 - 增加友好提示:当用户输入不合法时,给出明确的提示并让用户重新输入
这样修改后,程序不仅不会崩溃,还能处理用户的各种无效输入场景哦!
内容的提问来源于stack exchange,提问作者Hegazy Tarek
相关产品推荐
相关产品推荐

