Java数组最值计算异常求助:min/max方法返回首个输入值
问题分析与修复方案
嘿,我一眼就看到你的min和max方法里的逻辑问题了——这俩方法根本没在做“找最小/最大值”的事儿,难怪结果不对!
先说说你代码里的错误点:
1. min方法的问题
- 你初始化了
shortest = 0和smallest = 100,但循环里完全没用到数组元素和smallest做比较 - 循环内的判断条件
if (length < smallest)是拿数组长度和smallest比,这跟数组里的元素大小一点关系都没有 - 错误地把
arr[i]累加到shortest,最后返回的是个累加值,不是数组里的最小元素
2. max方法的问题
和min方法犯了一模一样的错误:拿数组长度和变量比较,错误累加元素,完全没去遍历比较数组里的元素大小
修正后的代码
我帮你把min、max方法重写了,同时整理了完整代码,确保逻辑正确:
import java.util.Scanner; public class ArrayStats { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int amount; System.out.println(" Enter the amount of numbers you would like to enter: "); amount = scan.nextInt(); int[] arr = new int[amount]; int outcome = 1; for (int i = 0; i < arr.length; i++) { System.out.println("Enter a number 1 through 50"); outcome = scan.nextInt(); arr[i] = outcome; } System.out.println(" "); System.out.println(" The average is"); System.out.println(average(arr)); System.out.println(" "); System.out.println(" The lowest value in the array is "); System.out.println(min(arr)); System.out.println(" "); System.out.println(" The largest value in the array is "); System.out.println(max(arr)); System.out.println(" "); scan.close(); } public static double average(int[] arr) { double sum = 0; int value = arr.length; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } sum = sum / value; return sum; } public static int min(int[] arr) { // 初始化最小值为数组第一个元素 int smallest = arr[0]; // 从第二个元素开始遍历比较 for (int i = 1; i < arr.length; i++) { if (arr[i] < smallest) { smallest = arr[i]; } } return smallest; } public static int max(int[] arr) { // 初始化最大值为数组第一个元素 int largest = arr[0]; // 从第二个元素开始遍历比较 for (int i = 1; i < arr.length; i++) { if (arr[i] > largest) { largest = arr[i]; } } return largest; } }
修正逻辑说明
min方法:先把数组第一个元素当作初始最小值,然后逐个遍历数组后续元素,只要遇到比当前最小值更小的元素,就更新最小值,最后返回这个最小值max方法:逻辑和min一致,只是比较条件换成“比当前最大值更大”
现在你再测试输入12、15、6,min会返回6,max会返回15,完全符合预期啦!
内容的提问来源于stack exchange,提问作者calvin jackson
相关产品推荐
相关产品推荐

