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循环应用 什么是循环嵌套? 什么是循环嵌套? ...
随机推荐
- 面试题:String,StringBuilder,StringBuffer三者的区别
摘要:总结Java中的String,StringBuilder,StringBuffer三者的区别和联系,介绍后两者的扩容机制. Java中的String,StringBuilder,String ...
- C#获得项目最后编译时间
C#获得项目最后编译时间 效果 具体格式可以自定义 核心代码 string GetCompileVersion() { string OriginVersion = "" + Sy ...
- Springboot笔记<13>单元测试
单元测试 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,使用@SpringBootTest注解会以springboot的环境启动 JUnit5常用注解 @Tes ...
- js格式化货币方法
闲来无事自己基于原生js方法封装了一个可用于常见货币格式化的方法,具体方法封装如下: /** * 格式化人民币金额 * @param number num 数字金额 * @param string s ...
- prometheus 日常配置记录
通用模糊匹配 irate(node_network_transmit_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m] ...
- Linux系统配置windows可访问的共享文件夹
一.简单说明 某些情况下,我们需要配置Linux系统的目录为共享文件夹,windows下可以直接访问.这里可以直接安装samba进行.(samba是一款软件,主要提供cifs协议,基于文件系统传输) ...
- 不写代码,让 AI 生成手机 APP!保姆级教程
你现在看到的 APP,是我完全用 AI 生成的,一行代码都没写!怎么做到的呢? 大家好,我是程序员鱼皮.AI 发展很快,现在随随便便就能生成一个网站,但是怎么纯用 AI 开发能在手机上运行的 APP ...
- 使用Spread控件构建Checkbook工程的技术指南
引言 在现代Web应用开发中,电子表格控件已成为处理财务数据.报表展示等场景的重要工具.葡萄城的Spread控件作为一款功能强大的ASP.NET表格组件,为开发者提供了丰富的API和灵活的定制能力.本 ...
- UFT send request & get response
str 为发出去的request :
- Java反射与自定义注解实战指南
Java反射与自定义注解实战指南 第一部分:Java反射核心机制 一.反射的本质与价值 反射是Java在运行时动态获取类信息并操作类的能力,它是框架设计的基石.通过反射,我们可以在运行时: 获取类的完 ...