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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:25:00