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

如何获取Random类生成的数组中的最小值?minNum赋值异常排查

问题根因

你当前代码的核心问题出在最大值、最小值的初始值设置错误:

  • 你生成的随机数范围是0.0 ~ 100.0,所有元素都大于等于0,minNum初始值设为0的话,永远不会触发arrayOfDoubles[i] < minNum的判断条件,最终最小值始终输出0,和实际结果不符
  • 哪怕后续需要兼容负数场景,现有初始值写法也会出错:如果数组所有元素都是负数,maxNum初始为0的话,最终最大值会错误输出0而不是数组内的最大元素
  • 原方法还缺少平均值计算逻辑,不符合需求要求

修复方案

你可以选择以下两种方式修正初始值问题,同时补充缺失逻辑:

方案1:用数组第一个元素作为初始值(推荐,兼容所有数值范围场景)

额外补充了空数组校验避免运行异常、缺失的sumMethod实现,完整可运行代码如下:

import java.util.Random;
import java.util.Scanner;

public class ArrayStatistic {
    // 补充原代码调用的sumMethod实现
    public static void sumMethod(double[] arrayOfDoubles) {
        double sum = 0.0;
        for (double num : arrayOfDoubles) {
            sum += num;
        }
        System.out.println("数组总和为:" + sum);
    }

    public static void averageMaxMinMethod(double[] arrayOfDoubles){
        // 边界校验,避免空数组/空指针报错
        if (arrayOfDoubles == null || arrayOfDoubles.length == 0) {
            System.out.println("数组为空,无法计算统计值");
            return;
        }
        // 初始值设为数组第一个元素
        double maxNum = arrayOfDoubles[0];
        double minNum = arrayOfDoubles[0];
        double sum = 0.0;

        for(int i = 0; i < arrayOfDoubles.length; i++){
            double current = arrayOfDoubles[i];
            if(current > maxNum) {
                maxNum = current;
            }
            if(current < minNum) {
                minNum = current;
            }
            sum += current;
        }
        // 计算平均值
        double average = sum / arrayOfDoubles.length;
        System.out.println("数组最大值为:" + maxNum);
        System.out.println("数组最小值为:" + minNum);
        System.out.println("数组平均值为:" + average);
    }

    public static void main(String[] args) {
        // 构建Scanner对象接收用户输入的数组大小
        Scanner keyboard = new Scanner(System.in);
        System.out.println("请输入你要录入的浮点数个数:");
        int sizeOfArray = keyboard.nextInt();

        // 初始化数组
        double[] arrayOfDoubles = new double[sizeOfArray];

        for(int i = 0; i < sizeOfArray; i++){
            // 使用Random类生成随机数填充数组
            Random randomNum = new Random();
            arrayOfDoubles[i] = randomNum.nextDouble(0.0 , 100.0);
        }
        // 调用方法
        sumMethod(arrayOfDoubles);
        averageMaxMinMethod(arrayOfDoubles);
        keyboard.close();
    }
}

方案2:用类型极值作为初始值

如果不想单独处理数组第一个元素,也可以把最大值初始化为double类型的最小值,最小值初始化为double类型的最大值,遍历时第一个元素必然会更新两个初始值,也能得到正确结果:

double maxNum = Double.MIN_VALUE;
double minNum = Double.MAX_VALUE;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:04