Java 流程控制:从「小白」到「能用」的 while 循环指南

 

「炎码工坊」技术弹药已装填!
点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】

 

一、问题驱动:为什么需要 while循环?

假设你正在开发一个程序,需要让用户输入一个正整数,如果用户输入了负数或零,程序应该提示重新输入。这个问题看似简单,但如果没有循环语句,代码会变得冗长且难以维护: 

// JDK 17 示例代码  
import java.util.Scanner;  

public class InputValidation {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        int number;  

        // 第一次输入  
        System.out.print("请输入一个正整数: ");  
        number = scanner.nextInt();  

        // 如果输入无效,手动重复提示  
        if (number <= 0) {  
            System.out.print("输入无效,请重新输入: ");  
            number = scanner.nextInt();  
        }  
        // ... 如果用户再次输错,代码需要无限复制?  
    }  
}  

这段代码的问题显而易见:需要重复编写几乎相同的代码块,且无法预知用户会输错多少次。这时,while 循环就能派上用场! 


二、while 循环的语法与流程图

1. 基本语法

while (布尔表达式) {  
    // 循环体(当条件为 true 时重复执行的代码)  
}  

2. 流程图解析

      ┌──────────────────┐  
      │   条件为 true?   │  
      └─────────┬────────┘  
                │ 是  
                ▼  
        ┌──────────────────┐  
        │   执行循环体代码   │  
        └──────────────────┘  
                ▼  
      ┌──────────────────┐  
      │   返回条件判断   │  
      └──────────────────┘  

三、实战案例:用 while 解决实际问题

案例 1:用户输入验证(问题驱动的直接解决方案)

import java.util.Scanner;  

public class InputValidation {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        int number;  

        // 只要输入无效,就持续循环  
        while (true) {  
            System.out.print("请输入一个正整数: ");  
            number = scanner.nextInt();  
            if (number > 0) break;  
            System.out.println("输入必须大于 0!");  
        }  

        System.out.println("您输入的有效数字是: " + number);  
    }  
}  

案例 2:计算累加和(从 1 加到 100)

public class SumCalculator {  
    public static void main(String[] args) {  
        int sum = 0;  
        int i = 1;  

        while (i <= 100) {  
            sum += i;  
            i++;  
        }  

        System.out.println("1 到 100 的累加和为: " + sum);  
    }  
}  

四、对比其他循环结构:while vs for vs do-while

特性 while for do-while
适用场景 循环次数未知 已知循环次数 至少执行一次循环体
代码简洁性 需手动管理初始化和迭代 初始化、条件、迭代集中书写 需注意条件判断在最后
潜在风险 可能因忘记更新条件导致死循环 灵活性稍低 若条件始终不满足,可能引发逻辑错误
示例 用户输入验证 遍历数组 菜单系统(至少显示一次)

五、避坑指南:while 循环的常见错误

错误 1:无限循环(死循环)

int i = 0;  
while (i < 5) {  
    System.out.println(i);  
    // 忘记 i++,i 永远为 0,循环无法退出  
}  

解决方法:确保循环体内有代码修改条件变量(如 i++)。 

错误 2:条件初始值错误

int number = -1;  
while (number > 0) {  
    // 这段代码永远不会执行!  
}  

解决方法:检查条件的初始值是否符合预期。 


六、进阶技巧:结合 break 和 continue

场景:跳过偶数并求奇数和

int sum = 0;  
int i = 0;  

while (i <= 10) {  
    i++;  
    if (i % 2 == 0) continue; // 跳过偶数  
    sum += i;  
}  

System.out.println("奇数和为: " + sum);  

七、总结:何时选择 while 循环?

  1. 循环次数不确定时(如等待用户输入、动态数据处理)。 
  2. 需要灵活控制循环条件时(如结合 break 和 continue 实现复杂逻辑)。 
  3. 与 do-while 对比:如果希望至少执行一次循环体,优先选择 do-while

记住一句话while 是「先判断后执行」,而 do-while 是「先执行后判断」。 


最后留个小问题: 

如果让你用 while 实现一个简单的「ATM 取款验证」(密码错误时允许重试 3 次),你会怎么写? 

欢迎在评论区分享你的思路!

 

您已阅读完全文99%!缺少1%的关键操作:
加入「炎码燃料仓」
获得:
√ 开源工具红黑榜 √ 项目落地避坑指南
√ 每周BUG修复进度+1%彩蛋
(温馨提示:本工坊不打灰工,只烧脑洞)

 

你可能感兴趣的:(java)