Java里如何防止除零异常,并灵活控制输出结果?
- 内容介绍
- 文章标签
- 相关推荐
本文共计662个文字,预计阅读时间需要3分钟。
原文:
在编写交互式数值处理程序时,一个常见但关键的健壮性问题是:当用户未输入任何有效数字(即首次输入即为负数)时,程序不应尝试计算平均值或打印总和。原代码中 count 初始为 0,若循环一次未执行(n < 0 立即退出),后续仍无条件执行 sum / count,导致 ArithmeticException(编译期虽不报错,但运行时 0.0 / 0.0 产生 NaN),且输出逻辑不符合题目要求。
正确的做法是:将 sum 和 average 的输出严格限定在 count > 0 的前提下。这不仅避免了数学上无意义的运算,也符合题干“不输出 sum 和 average”的明确需求。
以下是修正后的完整代码(关键修改已加注释):
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; // 无需对 count 强转 double,sum 已隐式提升 System.out.println("sum of integers = " + sum); System.out.printf("average = %.2f%n", average); // 使用 %n 保证跨平台换行 } input.close(); } }
注意事项与最佳实践:
立即学习“Java免费学习笔记(深入)”;
- count > 0 是逻辑分界点:它既是数学安全的前提(避免 0/0),也是业务规则的体现(无数据则无统计);
- printf 中建议使用 %n 替代 \n,以兼容不同操作系统的换行符;
- sum += n 比 sum = sum + n 更简洁且语义清晰;
- 即使 sum 为 0(如输入 0 0 0 -1),只要 count > 0,平均值 0.00 仍是合法且有意义的结果,本方案完全支持该用例。
通过这一微小但关键的条件封装,程序从“可能崩溃/输出错误”转变为“始终行为明确、符合预期”,这也是初学者迈向健壮编程的重要一步。
本文共计662个文字,预计阅读时间需要3分钟。
原文:
在编写交互式数值处理程序时,一个常见但关键的健壮性问题是:当用户未输入任何有效数字(即首次输入即为负数)时,程序不应尝试计算平均值或打印总和。原代码中 count 初始为 0,若循环一次未执行(n < 0 立即退出),后续仍无条件执行 sum / count,导致 ArithmeticException(编译期虽不报错,但运行时 0.0 / 0.0 产生 NaN),且输出逻辑不符合题目要求。
正确的做法是:将 sum 和 average 的输出严格限定在 count > 0 的前提下。这不仅避免了数学上无意义的运算,也符合题干“不输出 sum 和 average”的明确需求。
以下是修正后的完整代码(关键修改已加注释):
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; // 无需对 count 强转 double,sum 已隐式提升 System.out.println("sum of integers = " + sum); System.out.printf("average = %.2f%n", average); // 使用 %n 保证跨平台换行 } input.close(); } }
注意事项与最佳实践:
立即学习“Java免费学习笔记(深入)”;
- count > 0 是逻辑分界点:它既是数学安全的前提(避免 0/0),也是业务规则的体现(无数据则无统计);
- printf 中建议使用 %n 替代 \n,以兼容不同操作系统的换行符;
- sum += n 比 sum = sum + n 更简洁且语义清晰;
- 即使 sum 为 0(如输入 0 0 0 -1),只要 count > 0,平均值 0.00 仍是合法且有意义的结果,本方案完全支持该用例。
通过这一微小但关键的条件封装,程序从“可能崩溃/输出错误”转变为“始终行为明确、符合预期”,这也是初学者迈向健壮编程的重要一步。

