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

Java代码调试:如何计算最大值并与加权平均值比较?

问题排查与代码修正

原代码的核心错误

  • 逻辑顺序错误:原代码在每次输入一个数值后立刻判断输出,但加权平均值和最大值需要所有4个数值输入完成后才能计算,循环内的即时输出完全不符合需求。
  • 判断条件错误:使用number%result >3属于逻辑混乱,需求是比较最大值与加权平均值的差值,而非当前输入数对加权和取模。
  • 未记录最大值:原代码未保存所有输入数值,无法找出最大值进行后续比较。
  • 过早计算输出:循环内就计算result/10并输出,此时加权和未累加完成,得到的是错误中间值。

修正后的代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double weightedSum = 0.0;
        double maxValue = Double.MIN_VALUE;

        // 输入4个数值,同步计算加权和、记录最大值
        for (int i = 1; i <= 4; i++) {
            double number = sc.nextDouble();
            weightedSum += number * i;
            if (number > maxValue) {
                maxValue = number;
            }
        }

        double weightedAvg = weightedSum / 10; // 权重总和为1+2+3+4=10

        // 按需求判断输出
        if (maxValue - weightedAvg > 3) {
            System.out.println("cheater!");
            System.out.println("-1.0");
        } else {
            System.out.printf("%.1f%n", weightedAvg);
        }

        sc.close();
    }
}

代码说明

  • 数据收集阶段:循环输入4个数值,累加每个数的加权贡献,同时更新记录的最大值。
  • 计算阶段:所有数据输入完成后,用加权总和除以权重总和10,得到最终加权平均值。
  • 输出判断阶段:比较最大值与加权平均值的差值,按需求输出对应内容:
    • 差值大于3时,输出cheater!和-1.0
    • 差值小于等于3时,输出保留1位小数的加权平均值

测试验证

  1. 输入5.5 6.1 7.3 5.8:
    加权平均值为6.28,保留1位小数是6.3;最大值7.3与平均值差值为1.02<3,输出6.3,符合预期。
  2. 输入3.0 5.4 9.8 2.5:
    加权平均值为5.32;最大值9.8与平均值差值为4.48>3,输出cheater!和-1.0,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:05:15