Java数组最值查找程序编译通过但运行结果错误修复方案
问题根因
你的判断完全准确,最小值输出错误的核心原因是currentMax2初始值被设置为0:
- 计算最大值时初始值设为0,仅在所有输入值均大于0的场景下能得到正确结果,如果输入包含负数,最大值计算同样会出错。
- 计算最小值时初始值设为0,只要所有输入值都大于0,每次执行
Math.min(a[j], currentMax2)得到的结果永远是0,永远不会更新为输入的实际最小值,就会出现输入最小值为109、最终输出0的异常结果。
修改方案
不要用0作为最值变量的初始值,改为读取完数组后,用数组的第一个元素作为两个最值变量的初始值,从数组第二个元素开始遍历比较即可,该方案兼容正整数、负整数、0所有输入场景:
- 删除原有
ll、sl、currentMax1、currentMax2四个变量赋值为0的初始化逻辑 - 完成10个数字的数组读取后,将
currentMax1、currentMax2均赋值为a[0](数组第一个元素) - 最值比较的循环从索引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
相关产品推荐
相关产品推荐

