Java中的while循环

while循环的基本结构

while循环的核心思想是"当条件满足时就执行",其基本语法结构如下:

while (条件表达式) {
// 循环体:条件为true时执行的代码块
}
// 循环结束后继续执行的代码

执行流程解析

  1. 计算条件表达式的值(结果为boolean类型)
  2. 如果结果为true,执行循环体中的代码块
  3. 循环体执行完毕后,回到步骤1重新判断条件
  4. 如果结果为false,跳出循环,执行后续代码

这种"先判断,后执行"的特性意味着while循环可能一次都不执行,如果初始条件就为false的话。

基础示例:累加计算

最经典的while循环应用是进行累加计算,例如计算1到100的总和:

public class WhileSumExample {
public static void main(String[] args) {
int sum = 0; // 用于存储累加结果
int n = 1; // 循环变量,从1开始 while (n <= 100) { // 循环条件:n小于等于100
sum = sum + n; // 将当前n的值累加到sum
n++; // n的值加1,准备下一次循环
} System.out.println("1到100的和为:" + sum); // 输出5050
}
}

在这个例子中:

  • 循环变量n控制着循环的次数
  • 每次循环都更新sumn的值
  • n超过100时,循环条件变为false,循环结束

循环变量与边界条件

while循环的关键在于正确控制循环变量和边界条件,稍不注意就可能导致结果错误或死循环。

边界条件错误示例

观察以下代码,它试图计算1到100的和,但结果不正确:

public class WhileBoundaryError {
public static void main(String[] args) {
int sum = 0;
int n = 0; while (n <= 100) {
n++; // 先自增
sum = sum + n; // 再累加
} System.out.println(sum); // 结果是5150,而非预期的5050
}
}

错误原因分析:

  • 初始n=0,第一次循环先执行n++使n=1,累加1
  • 最后一次循环中,n=100满足条件,执行n++使n=101,累加101
  • 实际计算的是1到101的和,导致结果多了101

避免死循环

死循环是指循环条件永远为true的循环,会导致程序无法继续执行后续代码,甚至耗尽系统资源。

// 死循环示例,请勿运行
public class InfiniteLoop {
public static void main(String[] args) {
int n = 1;
while (n > 0) { // 条件永远为true
System.out.println(n);
n++;
}
}
}

上述代码看似是死循环,但由于int类型有最大值(2147483647),当n达到最大值后再加1会因溢出变成负数,导致循环条件变为false而退出。这是一种特殊情况,并非我们期望的循环结束方式。

避免死循环的方法

  • 确保循环体内有修改循环变量的语句
  • 循环条件应在有限次循环后变为false
  • 复杂循环中可添加安全退出机制(如最大循环次数限制)

实际应用案例

案例1:用户输入验证

import java.util.Scanner;

public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age = -1; // 初始值设为无效值 // 循环直到用户输入有效的年龄
while (age < 0 || age > 120) {
System.out.print("请输入您的年龄(0-120):");
age = scanner.nextInt(); if (age < 0 || age > 120) {
System.out.println("年龄输入无效,请重新输入!");
}
} System.out.println("您的年龄是:" + age);
scanner.close();
}
}

这个例子中,while循环用于确保用户输入有效的年龄值,直到输入符合要求才退出循环。

while循环的适用场景

while循环特别适合以下场景:

  • 当循环次数不确定,需要根据动态条件决定是否继续循环
  • 当需要在循环开始前判断条件
  • 输入验证、事件监听等需要持续等待某个条件满足的场景

相比其他循环(如for循环),while循环更强调"条件驱动"而非"次数驱动"。

总结

  • 基本语法:while (条件) { 循环体 }
  • 执行流程:先判断条件,条件为true则执行循环体,否则退出
  • 关键要素:循环条件和循环变量的更新,二者共同控制循环次数
  • 注意事项:
    • 避免死循环,确保循环能在有限次执行后结束
    • 仔细处理循环变量和边界条件,避免多算或少算

Java流程控制——4.while循环的更多相关文章

  1. Java流程控制之for循环

    for循环[重点] 虽然所有的循环结构都可以用while或者do...while表示,但Java提供了另一种语句--for循环,使一些循环结构变得更加简单. for循环语句是支持迭代的一种通用结构,是 ...

  2. Java流程控制之DoWhile循环

    DoWhile循环 对于while语句而言,如果不满足条件,则不能进入循环.但有时候我们需要即使不满足条件,也至少执行一次. do...while 循环和 while循环相似,不同的是,do...wh ...

  3. Java流程控制之while循环详解

    while循环 while循环 do...while循环 for循环 在Java5中引入了一种主要用于数组的增强型for循环 while循环 while循环是最基本的循环,它的结构为 while(布尔 ...

  4. 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结

    053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...

  5. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  6. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  7. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

  8. 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句

    049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...

  9. 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和

    048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...

  10. 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用

    047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...

随机推荐

  1. 深入理解Nginx-模块开发与架构解析(第2版)第一章

    为什么选择Nginx 更快 高扩展性 高可靠性 低内存消耗 单机支持10万以上的并发连接 热部署 最自由的BSD许可协议 Nginx先天的事件驱动型设计.全异步的网络I/O处理机制.极少的进程间切换以 ...

  2. K8S对Pod调度失败,Schdule控制器报错1 scheduling_queue.go:346] Unable to find backoff value for pod default/engine-video-process-worker-face-face-24902-t4-6b5bcf6d9c-swdwp in backoffQ

    问题描述: 1.生产环境,基于K8s部署的应用,某个应用按要求需要运行9个副本,项目成功运行50余天后,应用的pod突然由9个变为6个,其他3个变为Pengding状态: 2.9个Pod需要消耗服务器 ...

  3. jdk exe安装包如何自制zip解压版

    前言 jdk8 oracle官方下载页面 https://www.oracle.com/java/technologies/downloads/#java8-windows 可以看到,只有exe安装包 ...

  4. 在云服务器上开MC-Forge服

    在云服务器上开MC-Forge服 记录一下在云服务器上开mc-1.16.5-Forge服. OS: Ubuntu 22.04.2 LTS x86_64 CPU: Intel Xeon Platinum ...

  5. 西门子成都工厂的DevSecOps实践

    大家好,我是Edison. 4月15日,成都.NET线下技术沙龙活动中,我分享了一个主题<西门子成都工厂的DevSecOps实践>,向大家介绍了我们为什么要做DevSecOps 以及 我们 ...

  6. 2023年成都.NET线下技术沙龙即将到来!

    MASA技术团队联合成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者创造一次交流学习的契机,我们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得. 本场沙龙 ...

  7. [原创]《C#高级GDI+实战:从零开发一个流程图》第05章:有锯齿?拖动闪烁?优化!优化!

    一.前言 前面的课程我们实现了矩形.圆形的拖动,以及不同形状间的连线,在实现的过程中,很多读者都发现并提出来了存在显示质量差有锯齿.拖动不流畅还闪烁等问题,作为承上启下的一节课程,我们本节就来看一上如 ...

  8. C++ set/multiset容器 学习总结

    -------------------------------------set/multiset容器 set/multiset特性 set/multiset的特性是所有元素会根据元素的值自动进行排序 ...

  9. 新人如何入门学习 STM32?

    作为一个在嵌入式领域摸爬滚打了近10年的老兵,看到这个问题时我的思绪瞬间回到了当年那个懵懂的自己.说实话,2014年那个夏天,24岁的我刚从机械专业毕业却被调剂到了厦门某马的电子部门,第一次听到&qu ...

  10. C# 通过正则表达式保留指定的字符串信息

    string ddd = "萨芬啊手动阀 asdfas--_asd   fasf \r\n,ss,s.s.s'dd'd·d`d%%##"; var dss = Regex.Repl ...