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

Java数组最值查找程序编译通过但运行结果错误修复方案

问题根因

你的判断完全准确,最小值输出错误的核心原因是currentMax2初始值被设置为0:

  • 计算最大值时初始值设为0,仅在所有输入值均大于0的场景下能得到正确结果,如果输入包含负数,最大值计算同样会出错。
  • 计算最小值时初始值设为0,只要所有输入值都大于0,每次执行Math.min(a[j], currentMax2)得到的结果永远是0,永远不会更新为输入的实际最小值,就会出现输入最小值为109、最终输出0的异常结果。
修改方案

不要用0作为最值变量的初始值,改为读取完数组后,用数组的第一个元素作为两个最值变量的初始值,从数组第二个元素开始遍历比较即可,该方案兼容正整数、负整数、0所有输入场景:

  1. 删除原有ll、sl、currentMax1、currentMax2四个变量赋值为0的初始化逻辑
  2. 完成10个数字的数组读取后,将currentMax1、currentMax2均赋值为a[0](数组第一个元素)
  3. 最值比较的循环从索引1(对应数组第二个元素)开始遍历,减少一次无意义的自身比较。

修正后的完整代码如下:

import java.util.Scanner;
class NumbersInArray
{
    public static void main()
    {
        System.out.println("\f");
        Scanner sc = new Scanner(System.in);
        int a[] = new int[10];
        int ll;
        int sl;
        int currentMax1;
        int currentMax2;
        System.out.println("Enter 10 random numbers");
        for (int i = 0; i <= 9; i++)
        {
            a[i] = sc.nextInt();
        }
        // 用数组首元素初始化最值基准
        currentMax1 = a[0];
        currentMax2 = a[0];
        for (int i = 1; i <= 9; i++)
        {
            currentMax1 = Math.max(a[i],currentMax1);
            ll = currentMax1;
        }
        System.out.println("The largest number is "+ll);
        for (int j = 1; j <= 9; j++)
        {
            currentMax2 = Math.min(a[j],currentMax2);
            sl = currentMax2;
        }
        System.out.println("The smallest number is "+sl);
    }
}

可选优化:可以将两次遍历数组合并为单次遍历,在一次循环中同时更新最大值和最小值,减少数组遍历次数提升效率。

内容的提问来源于stack exchange,提问作者Bongo Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:09:58