Java流程控制——4.while循环
Java中的while循环
while循环的基本结构
while循环的核心思想是"当条件满足时就执行",其基本语法结构如下:
while (条件表达式) {
// 循环体:条件为true时执行的代码块
}
// 循环结束后继续执行的代码
执行流程解析
- 计算
条件表达式的值(结果为boolean类型) - 如果结果为
true,执行循环体中的代码块 - 循环体执行完毕后,回到步骤1重新判断条件
- 如果结果为
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控制着循环的次数 - 每次循环都更新
sum和n的值 - 当
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循环的更多相关文章
- Java流程控制之for循环
for循环[重点] 虽然所有的循环结构都可以用while或者do...while表示,但Java提供了另一种语句--for循环,使一些循环结构变得更加简单. for循环语句是支持迭代的一种通用结构,是 ...
- Java流程控制之DoWhile循环
DoWhile循环 对于while语句而言,如果不满足条件,则不能进入循环.但有时候我们需要即使不满足条件,也至少执行一次. do...while 循环和 while循环相似,不同的是,do...wh ...
- Java流程控制之while循环详解
while循环 while循环 do...while循环 for循环 在Java5中引入了一种主要用于数组的增强型for循环 while循环 while循环是最基本的循环,它的结构为 while(布尔 ...
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
- 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...
随机推荐
- 深入理解Nginx-模块开发与架构解析(第2版)第一章
为什么选择Nginx 更快 高扩展性 高可靠性 低内存消耗 单机支持10万以上的并发连接 热部署 最自由的BSD许可协议 Nginx先天的事件驱动型设计.全异步的网络I/O处理机制.极少的进程间切换以 ...
- 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需要消耗服务器 ...
- jdk exe安装包如何自制zip解压版
前言 jdk8 oracle官方下载页面 https://www.oracle.com/java/technologies/downloads/#java8-windows 可以看到,只有exe安装包 ...
- 在云服务器上开MC-Forge服
在云服务器上开MC-Forge服 记录一下在云服务器上开mc-1.16.5-Forge服. OS: Ubuntu 22.04.2 LTS x86_64 CPU: Intel Xeon Platinum ...
- 西门子成都工厂的DevSecOps实践
大家好,我是Edison. 4月15日,成都.NET线下技术沙龙活动中,我分享了一个主题<西门子成都工厂的DevSecOps实践>,向大家介绍了我们为什么要做DevSecOps 以及 我们 ...
- 2023年成都.NET线下技术沙龙即将到来!
MASA技术团队联合成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者创造一次交流学习的契机,我们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得. 本场沙龙 ...
- [原创]《C#高级GDI+实战:从零开发一个流程图》第05章:有锯齿?拖动闪烁?优化!优化!
一.前言 前面的课程我们实现了矩形.圆形的拖动,以及不同形状间的连线,在实现的过程中,很多读者都发现并提出来了存在显示质量差有锯齿.拖动不流畅还闪烁等问题,作为承上启下的一节课程,我们本节就来看一上如 ...
- C++ set/multiset容器 学习总结
-------------------------------------set/multiset容器 set/multiset特性 set/multiset的特性是所有元素会根据元素的值自动进行排序 ...
- 新人如何入门学习 STM32?
作为一个在嵌入式领域摸爬滚打了近10年的老兵,看到这个问题时我的思绪瞬间回到了当年那个懵懂的自己.说实话,2014年那个夏天,24岁的我刚从机械专业毕业却被调剂到了厦门某马的电子部门,第一次听到&qu ...
- C# 通过正则表达式保留指定的字符串信息
string ddd = "萨芬啊手动阀 asdfas--_asd fasf \r\n,ss,s.s.s'dd'd·d`d%%##"; var dss = Regex.Repl ...