Java学习之旅第一季-23:控制语句之循环语句

在编程中,我们可能需要在某个条件为真时多次运行一段代码。而循环语句则用于重复一组指令。这组指令的执行取决于特定的条件。

在 Java 中,有三种不同形式的循环,它们的工作方式相同但是它们的语法有所不同。

  • while 循环
  • do-while 循环
  • for 循环(还有一种增强的for循环,即foreach循环本小节暂不考虑)

23.1 while循环

while循环是看起来语法最为简单的循环,通常用于循环次数不确定的场景,流程如下:

image-20251001154208598

其语法如下:

while(布尔表达式){ 
  循环体语句;
}

布尔表达式作为条件,用于控制是否执行循环体语句

循环体语句用于循环重复执行的代码,如果只有一条语句,则大括号可省

当程序执行到 while 循环时,首先判断条件是否成立,即while后小括号中布尔表达式的值是否为true,如果为 true 就执行循环体语句,执行时如果没有特殊情况退出循环的话,会执行代码块直至完成,然后继续回到while后进行布尔表达式的运算,如果结果仍然是true,继续进行循环体语句的执行;否则将终止循环语句。

这里需要理解,如果每次循环都要运算表示条件的布尔表达式的值,而它的值永远都是 true,那么循环将无限执行下去,形成死循环,在实际开发中,大部分场景使用的循环是要能结束的。这样的话,布尔表达式中的变量应该在每次循环执行时有所变化,才能在某次循环后,其值变为 false。

案例:控制台输出1-100之间的整数

int i = 1;                   // 声明整型变量 i,赋初始值为1
while (i <= 100) {           // 判断 i是否小于或等于100
    System.out.println(i);   // 输出 i
    i++;                     // i 自增 
}

上面的代码片段中第1行声明了整型变量 i,赋初始值为1,这属于循环的初始化,但是它不属于循环语法的一部分;接着进入 while 循环的条件判断,布尔表达式 i <= 100 此时成立,所以进入第3行,输出 i 的值 1,接着执行第4行,对 i 进行自增,此时i的值为2。执行完这两句代码之后,程序会继续回到第2行,再次对 i <= 100 进行运算,虽然 i 的值从1变为了2 ,但此时 i <= 100 的结果仍然是true,所以继续执行循环体,依次类推,当 i 的值变为 100 时将是最后一次循环,输出100后,i 自增变为 101,此时条件 i <= 100 就不成立了,整个while语句就结束了。

23.2 do/while循环

当需要至少执行一次代码块时,可以使用do/while循环,其流程如下:

image-20251001161228699

其语法如下:

do{
 循环体语句;
}while(布尔表达式);

执行流程:先执行 do 关键字后的循环体语句,然后计算 while 后小括号中布尔表达式的值,如果为 true 则继续执行 do 后的循环体语句,否则终止循环。

案例:控制台输出1-100之间的整数

int i = 1;                     // 声明整型变量 i,赋初始值为1
do {
    System.out.println(i);     // 输出 i
    i++;                       // i 自增
} while (i <= 100);            // 判断 i是否小于或等于100

还是同样的功能,此时的写法与之前有所不同,这段代码中的循环语句,从第 2 行的 do 关键字开始。首先无条件执行第 3 行和第 4 行,即先输出 i 的值,然后 i 自增,接着执行第 5 行布尔表达式的求值,如果是 true 则继续回到第 3 行输出i并执行第 4 行对 i 自增,经过不断循环执行直到 i <= 100 不成立,则整个while循环终止。

23.3 for循环

while 与 do/while 循环中,初始化代码是在循环结构之前,并不属于循环本身,而用于控制布尔表达式值的变量更新是在循环体语句中,都显得不够紧凑。

Java提供的 for 循环将初始化及变量更新以及循环体三者都放入循环结构中。

image-20251001165301360

for循环的语法看起来最复杂,却是使用最频繁的。

for(初始化语句; 布尔表达式; 变量更新){
  循环体语句;
}

语法结构:for后小括号中由三部分组成:

  • 初始化语句:通常定义循环的初始变量及为其赋值,只运行一次
  • 布尔表达式:用于控制是否执行循环体语句的条件
  • 变量更新:通常是更新布尔表达式的变量的值

执行流程:先执行初始语句,然后执行条件判断,值为 true 则执行循环体语句,接着执行变量更新的语句,之后继续对布尔表达式运算,结果用于条件判断,周而复始;如果布尔表达式的值为false,则终止循环。

这里介绍一下逗号运算符,它在Java中只出现在for循环中:

for (int i = 1, j = 1; i < 100; i++, j++) {
}

在 for 循环的变量更新部分出现了:i++, j++ 中间就是逗号运算符。我们了解下就可以。

23.4 嵌套结构

至此,我们已经学习了条件语句和循环语句的使用语法。在实际开发中,遇到较为复杂的逻辑,也会将他们混合起来使用,比如在选择语句中执行循环操作,也可能在循环体中出现选择语句或循环语句。

这里我使用两个案例来演示一下。

案例1:计算 1-1000 之间的个位是 7 的所有整数之和

int result = 0;
for (int i = 1; i < 1000; i++) {
    if (i % 10 == 7) {             // 对 10 求余为 7,表示个位是 7
        result += i;               // 将 i 累加到 result
    }
}
System.out.println(result);

上面代码结构就是典型的循环语句中使用条件语句。每循环一次就做一次条件判断,符合条件则执行设计好的逻辑、

案例2:输出九九乘法表

for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j + "*" + i + " = " + i * j + "\t");
    }
    System.out.println();
}

上面代码结构是在循环语句中执行循环语句,可以称为嵌套循环。外面循环称为外循环,里边循环称为内循环。

外循环每支持一次,内循环就执行一次完整的循环,且内循环就可以使用外循环中声明的变量。

23.5 死循环

死循环是没有循环次数或者不知道循环次数,自身无法终止的循环。

死循环的常见形式:

  • while(true){ }:条件表达式是永远不更新的 true
  • do{ }while(true); :条件表达式是永远不更新的 true
  • for( ; ; ){ } :形式较多,只要每次循环条件表达式没有变化的可能,要么一次都不循环,要么就是死循环

下面演示两个 for 循环是死循环的片段

for (; ; ) {
}

for (int i = 1; i < 100; ) {
}

不过要注意的是,就算使用上面三种形式实现的死循环,在循环体里使用跳转语句也可以退出循环。

23.6 小结

本小节介绍了Java中的三种循环结构:while循环、do-while循环和for循环。while循环适用于不确定循环次数的场景;do-while循环保证至少执行一次循环体;for循环将初始化、条件判断和变量更新整合在一起,是最常用的循环结构。还讲解了循环嵌套的使用方法,以及如何避免死循环。通过计算个位为7的整数之和和输出九九乘法表两个案例,展示了循环与条件判断、循环嵌套的实际应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值