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. 面试题:String,StringBuilder,StringBuffer三者的区别

    摘要:总结Java中的String,StringBuilder,StringBuffer三者的区别和联系,介绍后两者的扩容机制.   Java中的String,StringBuilder,String ...

  2. C#获得项目最后编译时间

    C#获得项目最后编译时间 效果 具体格式可以自定义 核心代码 string GetCompileVersion() { string OriginVersion = "" + Sy ...

  3. Springboot笔记<13>单元测试

    单元测试 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,使用@SpringBootTest注解会以springboot的环境启动 JUnit5常用注解 @Tes ...

  4. js格式化货币方法

    闲来无事自己基于原生js方法封装了一个可用于常见货币格式化的方法,具体方法封装如下: /** * 格式化人民币金额 * @param number num 数字金额 * @param string s ...

  5. prometheus 日常配置记录

    通用模糊匹配 irate(node_network_transmit_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m] ...

  6. Linux系统配置windows可访问的共享文件夹

    一.简单说明 某些情况下,我们需要配置Linux系统的目录为共享文件夹,windows下可以直接访问.这里可以直接安装samba进行.(samba是一款软件,主要提供cifs协议,基于文件系统传输) ...

  7. 不写代码,让 AI 生成手机 APP!保姆级教程

    你现在看到的 APP,是我完全用 AI 生成的,一行代码都没写!怎么做到的呢? 大家好,我是程序员鱼皮.AI 发展很快,现在随随便便就能生成一个网站,但是怎么纯用 AI 开发能在手机上运行的 APP ...

  8. 使用Spread控件构建Checkbook工程的技术指南

    引言 在现代Web应用开发中,电子表格控件已成为处理财务数据.报表展示等场景的重要工具.葡萄城的Spread控件作为一款功能强大的ASP.NET表格组件,为开发者提供了丰富的API和灵活的定制能力.本 ...

  9. UFT send request & get response

    str 为发出去的request :

  10. Java反射与自定义注解实战指南

    Java反射与自定义注解实战指南 第一部分:Java反射核心机制 一.反射的本质与价值 反射是Java在运行时动态获取类信息并操作类的能力,它是框架设计的基石.通过反射,我们可以在运行时: 获取类的完 ...