
本文讲解如何修正一个求平均值的 java 程序,使其在用户首次输入负数时跳过求和与平均值输出,防止出现 nan 和无意义的零值结果。
本文讲解如何修正一个求平均值的 java 程序,使其在用户首次输入负数时跳过求和与平均值输出,防止出现 nan 和无意义的零值结果。
在编写交互式数值处理程序时,一个常见但关键的边界情况是:用户未输入任何有效数据(即第一个输入就是负数)。此时若直接执行 sum / count,因 count == 0,会导致 double 除零——Java 中结果为 NaN(Not-a-Number),且后续输出“sum = 0”和“average = NaN”不仅不准确,还违背业务逻辑(如题目明确要求:“不输出 sum 和 average”)。
原始代码的核心问题在于:所有结果打印语句均无条件执行,缺少对有效输入数量的校验。解决方法非常简洁而重要:仅当 count > 0 时才计算并输出 sum 与 average。
以下是修复后的完整代码(关键修改已高亮说明):
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
import java.util.Scanner;
public class SumAverage2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("average program");
System.out.println("Enter multiple integers greater than or equal to 0.");
System.out.println("Enter a negative integer to finish the entry.");
boolean end = false;
int n;
int sum = 0;
int count = 0;
while (!end) {
n = input.nextInt();
if (n >= 0) {
sum += n;
count++;
} else {
end = true;
}
}
// ✅ 关键修复:仅当至少输入一个非负数时,才输出 sum 和 average
System.out.println("Number of integers greater than 0 entered = " + count);
if (count > 0) { // ← 核心判断:避免除零与无效输出
double average = (double) sum / count; // ✅ 可省略右侧(double)强制转换(int/double 自动提升)
System.out.println("sum of integers = " + sum);
System.out.printf("average = %.2f%n", average); // ✅ 添加%n确保换行
}
input.close();
}
}
注意事项与最佳实践:
- 永远验证分母是否为零:涉及除法前检查计数器/长度等变量,是健壮编程的基本习惯;
- 语义清晰优于简写:sum += n 比 sum = sum + n 更简洁可读;
- 格式化输出注意换行:printf(..., average) 后建议加 %n(平台无关换行符),避免输出粘连;
- 变量作用域最小化:average 声明在 if 块内更安全,避免意外复用;
- 测试边界用例:务必验证 -10、-1、空输入(虽本题由负数触发结束)等场景。
通过这一处逻辑判断,程序便能优雅处理“零输入”场景,符合题目全部要求:正确统计个数、不输出无效 sum/average、杜绝 NaN,也为你今后处理用户输入类问题打下坚实基础。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










