You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现用户输入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:27:32