You need to enable JavaScript to run this app. Java游泳圈时统计:数组与平均值的偏差计算及正负标识实现
优惠活动
大模型
产品
解决方案
定价
更多

Java游泳圈时统计:数组与平均值的偏差计算及正负标识实现

游泳比赛用时偏差计算功能修复方案

核心修正点

  • 修复循环边界错误:原循环终止条件i < inputArray.length - 1会遗漏最后一个数组元素,需调整为i < inputArray.length,覆盖所有圈数的计算
  • 保留偏差正负属性:移除所有Math.abs()绝对值截断逻辑,直接使用「当前圈时 - 平均圈时」的原始差值存入偏差数组,依托数值本身的正负即可区分快慢:
    • 圈时 > 平均圈时,差值为正,对应慢于平均的场景
    • 圈时 < 平均圈时,差值为负,对应快于平均的场景
  • 优化计算效率:原代码在循环判断中多次重复调用getAverageSplit计算平均值,需在循环开始前一次性计算并缓存平均值,避免无意义的重复计算
  • 补充输出格式适配:输出环节根据偏差值的正负,按要求拼接对应的+/-标识,满足格式要求

修正后的getDeviationsArray方法实现

public static double[] getDeviationsArray(Double[] inputArray) {
    // 一次性计算缓存平均圈时,避免循环内重复计算
    double averageTime = getAverageSplit(inputArray);
    double[] devArray = new double[inputArray.length];
    // 修正循环边界,遍历所有数组元素
    for (int i = 0; i < inputArray.length; i++) {
        // 直接计算原始差值,不做绝对值处理,保留正负属性
        devArray[i] = inputArray[i] - averageTime;
    }
    return devArray;
}

修正后的输出逻辑

原输出环节未根据偏差正负添加指定标识,修正后实现如下:

System.out.println("Here are the split-times and deviations for each lap/length:\n");
double[] devArray1 = getDeviationsArray(lapArray);
DecimalFormat df = new DecimalFormat("#.##");
int index1 = 1;
for (int i = 0; i < lapArray.length; i++) {
    double currentDev = devArray1[i];
    String devDisplay;
    // 按规则拼接偏差标识
    if (currentDev > 0) {
        // 慢于平均,添加+标识
        devDisplay = "+" + df.format(currentDev);
    } else if (currentDev < 0) {
        // 快于平均,DecimalFormat自动输出带-的格式
        devDisplay = df.format(currentDev);
    } else {
        // 恰好等于平均,无额外标识
        devDisplay = "0";
    }
    System.out.println("Lap or length #" + index1 + ": " + lapArray[i] + " seconds ("
            + devDisplay + ")");
    index1++;
}

逻辑匹配说明

修正后的输出完全符合需求规则:

  • 慢于平均的圈次,偏差值自动带+号,例如平均圈时30秒、某圈32秒时,输出偏差为+2.00
  • 快于平均的圈次,偏差值自动带-号,例如平均圈时30秒、某圈28秒时,输出偏差为-2.00
  • 所有圈次(包括数组最后一个元素)都会被正确计算,不会出现默认0值的遗漏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 10:36:03