Java循环输入数字到0计算平均值时result变量除法运算不生效如何解决
代码问题排查
你的代码存在3处核心逻辑错误,直接导致除法运算结果不符合预期:
- 未定义独立的累加变量:你反复用同一个
number变量接收用户输入、执行累加操作,每次读取新输入后旧的数值会直接被覆盖,number += number的逻辑本质是将当前输入值乘2,完全没有累计之前所有输入的数字,循环终止时number的值就是用来结束循环的0,所以最终除法运算的分子永远是0。 - 计数逻辑错误:不管用户输入的是不是用来终止的0,你都会执行
counter++,会把无效的终止输入也计入统计,导致平均值的分母偏大。 - 整数除法精度丢失:用
int类型执行除法会自动丢弃小数部分,即便分子分母数值正确,计算出来的平均值也会缺失精度。
修正后代码
import java.util.Scanner; public class AverageCalculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int inputNum = 0; int sum = 0; int counter = 0; do { System.out.println("请输入数字:"); inputNum = scanner.nextInt(); // 仅对非0的有效输入执行累加和计数 if (inputNum > 0) { sum += inputNum; counter++; } } while(inputNum != 0); // 输入0直接终止循环 // 先将sum强转为double再做除法,避免整数除法 double result = (double) sum / counter; System.out.println("已输入数字的平均值为 -> "+ result); scanner.close(); } }
内容的提问来源于stack exchange,提问作者Jose Erasmo Hernandez Yate
相关产品推荐
相关产品推荐

