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

修正getAverageRainfall方法实现月均降雨量计算的技术咨询

修正getAverageRainfall方法及解决重复输出问题

问题根源

  1. 重复打印总降雨量:getTotalRainfall方法内部直接包含了打印总降雨量的代码,main中调用该方法时会输出一次,getAverageRainfall调用它计算平均值时又会触发一次打印,导致重复输出。
  2. 未输出月均降雨量:main方法仅调用了getAverageRainfall,但没有将其返回的平均值结果打印到控制台。

修正方案

  1. 重构getTotalRainfall方法:移除方法内部的打印语句,让它只负责计算并返回总降雨量,把输出逻辑放到main方法中,遵循单一职责原则。
  2. 简化getAverageRainfall方法:直接调用getTotalRainfall获取总值后除以MONTHS即可,无需额外累加操作。
  3. 完善main方法:接收两个方法的返回值,统一处理输出逻辑。

修正后的完整代码

import java.io.IOException;
import java.util.Scanner;

public class RainfallCalculator {
    public static final int MONTHS = 12;
    static double[] rain = new double[MONTHS]; // 创建数组存储降雨量数值

    public static void main(String[] args) throws IOException {
        rain = getRainfall(args);
        displayRainfall(rain);
        
        // 获取总降雨量并打印
        double totalRain = getTotalRainfall(rain);
        System.out.printf("\nThe total rainfall for the year is: %.2f\n", totalRain);
        
        // 获取月均降雨量并打印
        double averageRain = getAverageRainfall(rain);
        System.out.printf("The average monthly rainfall is: %.2f\n", averageRain);
    }

    public static double[] getRainfall(String[] args) throws IOException {
        String[] months = { "January", "February", "March", "April", "May", "June", "July",
                "August", "September", "October", "November", "December" };

        double[] rain = new double[12];
        Scanner keyboard = new Scanner(System.in);

        for (int i = 0; i < months.length; i++) {
            System.out.print("Enter rainfall for " + months[i] + ": ");
            rain[i] = keyboard.nextDouble();
            if (rain[i] < 0) {
                System.out.println("You can not use a negative number.\n");
                i--;
            }
        }
        return rain;
    }

    private static void displayRainfall(double[] rain) {
        String[] months = { "January", "February", "March", "April", "May", "June", "July",
                "August", "September", "October", "November", "December" };

        System.out.println("\nDisplaying rainfall for each month\n");
        for (int i = 0; i < months.length; i++) {
            System.out.printf("Rainfall for %s: %.2f\n", months[i], rain[i]);
        }
    }

    private static double getTotalRainfall(double[] rain) {
        double total = 0.0;
        for (double value : rain) {
            total += value;
        }
        return total;
    }

    private static double getAverageRainfall(double[] rain) {
        return getTotalRainfall(rain) / MONTHS;
    }
}

补充说明

  • 调整后的getTotalRainfall仅负责计算总和,避免了重复打印的问题。
  • 使用printf格式化输出结果,让数值显示更规范。
  • 补充了原代码缺失的类声明,确保代码可正常编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:50:26