Java嵌套for循环异常:计算平均降雨量时循环次数错误
问题修复方案
你的问题出在嵌套循环的条件上:外层循环遍历年份(循环years次),但内层循环错误地用了years * 12作为终止条件,导致总循环次数变成years * years * 12——比如输入2年时,就是2*24=48次,自然会统计48个月的数据。
修复步骤:
- 把内层循环的条件改成
j <= 12,因为每一年固定是12个月,和总年份无关。 - 初始化
totalRain变量(你当前代码里没声明和初始化,会编译报错),建议用double类型来保留小数精度。 - 调整输出格式,让结果更易读。
修复后的完整代码:
import java.util.Scanner; public class AverageRainfall { public static void main(String[] args) { Scanner kb = new Scanner(System.in); double totalRain = 0; // 初始化总降雨量,用double保留精度 System.out.println("How many years did it rain? "); int years = kb.nextInt(); // 外层循环遍历每一年 for (int i = 1; i <= years; i++){ // 内层循环遍历当前年份的12个月 for(int j = 1; j <= 12; j++){ System.out.println("请输入第" + i + "年第" + j + "月的降雨量(英寸):"); totalRain += kb.nextDouble(); } } double averageRain = totalRain / (12 * years); System.out.printf("在%d年的时间里,平均降雨量为:%.2f英寸%n", years, averageRain); kb.close(); // 关闭Scanner } }
说明:
- 内层循环固定跑12次,外层循环跑
years次,总次数就是12*years,符合实际月份数。 - 用
double类型存储降雨量和平均值,避免整数除法导致的精度丢失(比如总降雨量是25,24个月的话,整数除法会得到1,而实际是1.04)。 - 优化了输入提示,让用户清楚知道当前输入的是哪一年哪一月的数据。
内容的提问来源于stack exchange,提问作者ioannis_03
相关产品推荐
相关产品推荐

