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

循环计算平均值时变量t未重置导致结果异常的问题求助

问题分析与解决方案

问题根源

你的代码核心问题是每次重新计算平均值时,没有重置总和变量t和计数变量count。第一次计算完成后,t保留了上一轮的总和,count也停留在6(内层循环到count<=5时停止,此时count为6),导致第二次循环时:

  • t会在之前的总和基础上继续累加新输入的数值
  • count初始值不是1,会直接跳过部分输入步骤,最终计算的t是两次输入的总和,除以5自然得到错误的平均值

修复步骤

  1. 重置关键变量:在外层do循环的最开始,将t重置为0,count重置为1(对应输入提示里的number1)
  2. 补全外层循环的退出逻辑:原代码缺少读取用户是否继续的输入判断,需要补充这部分逻辑,确保能正确退出循环

修复后的完整代码示例

import java.util.Scanner;

public class AverageCalculator {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int d1, total;
        // 外层循环控制是否重复执行
        do {
            int t = 0; // 每次循环重置总和为0
            int count = 1; // 每次循环重置计数为1
            // 内层循环读取5个有效整数
            do {
                System.out.print("Enter number" + count + ":");
                if (scan.hasNextInt()) {
                    d1 = scan.nextInt();
                    count++;
                    t += d1; // 只有输入有效时才累加
                } else {
                    System.out.print("Number is invalid. ");
                    scan.next(); // 清除无效输入
                    continue;
                }
            } while (count <= 5);
            
            total = t / 5;
            System.out.println("The average is :" + total + " .");
            
            System.out.print("[do you want to continue press[ y ]for yes and [ n]  for no ]:");
            // 读取用户选择,处理可能的空格/换行
            String choice = scan.next().trim().toLowerCase();
            if (!choice.equals("y")) {
                break; // 不是y就退出外层循环
            }
        } while (true);
        
        scan.close();
    }
}

额外说明

  • 把t和count声明在外层循环内部,每次循环都会重新初始化,彻底避免变量残留值的问题
  • 补充了用户输入选择的处理逻辑,确保循环能正确终止
  • 调整了t+=d1的位置,只有当输入是有效整数时才累加,逻辑更严谨

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:55:29