修正getAverageRainfall方法实现月均降雨量计算的技术咨询
修正
getAverageRainfall方法及解决重复输出问题 问题根源
- 重复打印总降雨量:
getTotalRainfall方法内部直接包含了打印总降雨量的代码,main中调用该方法时会输出一次,getAverageRainfall调用它计算平均值时又会触发一次打印,导致重复输出。 - 未输出月均降雨量:
main方法仅调用了getAverageRainfall,但没有将其返回的平均值结果打印到控制台。
修正方案
- 重构
getTotalRainfall方法:移除方法内部的打印语句,让它只负责计算并返回总降雨量,把输出逻辑放到main方法中,遵循单一职责原则。 - 简化
getAverageRainfall方法:直接调用getTotalRainfall获取总值后除以MONTHS即可,无需额外累加操作。 - 完善
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
相关产品推荐
相关产品推荐

