如何获取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
相关产品推荐
相关产品推荐

