Java中While循环输出异常:最小值与平均值计算错误排查
代码错误分析与修复
问题点梳理
- 最小值初始化错误:
low被初始化为0,而输入的有效数字都是正整数,导致最终输出的最小值始终为0,不符合预期。 - 首数字未统计:第一个输入的数字(1)没有被加入
sum和count,直接进入循环读取下一个数,导致总和少1、计数少1,平均值计算错误。 - 终止符被误统计:循环内先读取下一个数字再判断,导致作为终止标记的-1被加入
sum和count,进一步拉低平均值。 - 最小值判断逻辑错误:原代码用
num < max作为更新最小值的条件,这完全不符合逻辑,应该判断num < low才更新最小值。
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int num, max, low, sum; int count = 0; double avg = 0; // 读取第一个有效数字并初始化变量 num = scnr.nextInt(); max = num; low = num; sum = num; count = 1; // 循环读取后续数字,直到遇到负数 while (true) { num = scnr.nextInt(); if (num < 0) { break; // 遇到负数直接终止循环 } // 更新最大值 if (num > max) { max = num; } // 更新最小值 if (num < low) { low = num; } sum += num; count++; } avg = (double) sum / count; System.out.println("Count of positive integers is: " + count); System.out.println("The highest value is: " + max); System.out.println("The lowest value is: " + low); System.out.println("The average is: " + avg); } }
验证结果
输入1 2 2 1 3 -1后,输出与预期完全一致:
Count of positive integers is: 5
The highest value is: 3
The lowest value is: 1
The average is: 1.8
内容的提问来源于stack exchange,提问作者JonathanG
相关产品推荐
相关产品推荐

