
本文详解 Java 中 while 循环判断数字范围时常见的逻辑错误(尤其是误用 || 导致无限循环),通过分析典型错例,给出符合题意的正确实现,并强调边界条件、循环终止逻辑和计数时机等关键要点。
本文详解 java 中 while 循环判断数字范围时常见的逻辑错误(尤其是误用 `||` 导致无限循环),通过分析典型错例,给出符合题意的正确实现,并强调边界条件、循环终止逻辑和计数时机等关键要点。
在 Java 编程中,使用 while 循环读取并统计满足特定范围条件的整数,看似简单,却极易因布尔逻辑错误导致程序行为异常——最典型的陷阱就是混淆 && 与 || 的语义,从而让循环永不停止。
以题目要求为例:
从标准输入读取整数,持续读取直到遇到一个不在区间 [-20, 25] 内的数(即 25);输出总共读取的整数个数(含导致终止的那个数)。
原代码中的核心问题在于循环条件:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
while ((inputValue >= -20) || (inputValue <p>这个条件等价于:<strong>只要 inputValue ≥ -20 <em>或</em> ≤ 25,就继续循环</strong>。而实际上,<strong>所有整数都满足该条件</strong>!<br> 例如: </p>
- -49 ≥ -20 → false,但 -49 ≤ 25 → true ⇒ 整体为 true
- 100 ≥ -20 → true ⇒ 整体为 true
→ 无论输入何值,该条件恒为 true,造成无限循环(除非输入异常中断)。
✅ 正确逻辑应是:仅当 inputValue 落在 [-20, 25] 区间内时才继续读取,即需同时满足两个条件:
inputValue >= -20 && inputValue
因此,循环应在读取到 不满足 该条件的数时立即退出,且该数也计入总数。
以下是修正后的完整可运行代码:
import java.util.Scanner;
public class CountRead {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
int inputValue;
int countRead = 0;
// 首次读取
inputValue = scnr.nextInt();
countRead++; // 第一个数始终计入
// 当前数仍在有效范围内时,继续读取下一个
while (inputValue >= -20 && inputValue <p>? 关键修正点说明: </p>
- 循环条件改为 &&:确保仅当数值严格落在 [-20, 25] 内才继续循环;一旦读入 -49、30 等越界值,条件为 false,循环立即终止。
- 计数逻辑前置:首次读取后立刻 countRead++,后续每次成功读取新数(且满足范围)后再计数,保证终止数也被统计。
- 无需 +1 补偿:因每次读取均对应一次计数,最终 countRead 即为总读取个数,语义清晰、不易出错。
⚠️ 注意事项:
- 输入必须至少包含一个整数,否则 scnr.nextInt() 抛出 NoSuchElementException;生产环境建议增加 hasNextInt() 校验。
- 题目明确“包括导致停止的整数”,因此终止判断必须发生在读取之后(而非之前预测),本解法完全符合要求。
- 若需支持多组测试或健壮性增强,可将核心逻辑封装为方法,并添加异常处理。
掌握 while 循环的终止条件设计,本质是准确建模「何时继续」而非「何时停止」——前者用正向逻辑(&& 连接有效区间),后者若直接否定易引入双重否定谬误。这是 Java 基础编程中值得反复强化的逻辑思维习惯。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










