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

Java体操评分程序:计算的平均分与预期不符,求排查

问题分析与修复

你遇到的问题核心是计算平均分时分母使用错误:你在计算平均分时用了原数组的长度(comp1.length即10),但实际上去掉最高分和最低分后,你只统计了8个元素的总和,所以分母应该是8,而不是原数组长度。这直接导致了所有选手的平均分计算结果偏差。

错误点详解

  • 对于选手1:你累加了排序后索引1到8的8个元素,但除以10,导致平均分被缩小,正确计算应该是总和除以8;
  • 对于选手3:8个1.0的总和是8.0,除以10得到0.8(你输出的0.9000可能是运行时的小误差),但除以8就能得到预期的1.0;
  • 选手2的结果看似正确(0.0000),只是因为0除以任何数都是0,本质上分母使用错误的问题依然存在。

修复后的代码

import java.util.*;
import java.text.*;

public class EZD_gymnastics {
    public static void main (String [] args) {
        double comp1[] = {8.7, 6.5, 0.1, 3.2, 5.7, 9.9, 8.3, 6.5, 6.5, 1.5};
        double comp2[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
        double comp3[] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};

        NumberFormat fmt = NumberFormat.getNumberInstance();
        fmt.setMaximumFractionDigits(4);
        fmt.setMinimumFractionDigits(4);

        // 处理选手1
        Arrays.sort(comp1);
        double sum = 0;
        for(int a = 1; a < 9; a++) {
            sum += comp1[a];
        }
        double mean = sum / 8; // 改为除以8
        String s = fmt.format(mean);
        System.out.println("For Competitor #1, the average is " + s + ".");

        // 处理选手2
        Arrays.sort(comp2);
        double sum2 = 0;
        for(int b = 1; b < 9; b++) {
            sum2 += comp2[b];
        }
        double mean2 = sum2 / 8;
        String t = fmt.format(mean2);
        System.out.println("For Competitor #2, the average is " + t + ".");

        // 处理选手3
        Arrays.sort(comp3);
        double sum3 = 0;
        for(int c = 1; c <9; c++) {
            sum3 += comp3[c];
        }
        double mean3 = sum3 / 8;
        String u = fmt.format(mean3);
        System.out.println("For Competitor #3, the average is " + u + ".");
    }
}

额外优化建议

为了避免重复代码,同时让程序适配不同数量的评分(比如不是固定10个),可以提取一个通用方法来计算平均分:

private static double calculateAverage(double[] scores) {
    Arrays.sort(scores);
    double sum = 0;
    // 用length-1代替硬编码的9,适配任意长度的评分数组
    for (int i = 1; i < scores.length - 1; i++) { 
        sum += scores[i];
    }
    // 总长度减2,自动计算有效评分数量
    return sum / (scores.length - 2); 
}

之后在main方法中直接调用即可:

double mean = calculateAverage(comp1);
double mean2 = calculateAverage(comp2);
double mean3 = calculateAverage(comp3);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:11:51