[Java · 铢积寸累] 流程控制 — 循环结构

🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java · 学习手册

反复做一件相同的事情,称为循环。通过循环语句,我们可以多次执行相同的语句而不需要重复编写代码。Java 中主要有三种循环语句,分别是 while 循环、do ... while 循环 和 for 循环。这三种循环语句对条件表达式的要求不同,语法也不同,下面分别进行介绍。

0x01:循环结构 — while 循环

0x0101:while 循环 — 概念解析

while 循环是 Java 中比较简单的循环语句,它通过条件表达式控制是否需要重复执行循环体中的语句块。while 循环的语法格式如下:

while (循环条件) {
    循环体;
}

在循环刚开始时,Java 会判断一次 “循环条件” 是否满足,如果满足,就执行内部 “循环体” 的代码。当执行到循环的末尾 } 时,它又会去判断一次 “循环条件” 看看是否满足,如果满足,继续执行 “循环体” 的代码,若不满足,则退出循环,执行后续的代码。

while 循环结构的流程图如下图所示:

0x0102:while 循环 — 案例演示

假设我们现在有这么一个需求,就是让用户输入一个正整数 n,然后程序将计算从 1 开始到 n 结束的所有正整数之和(为了打印好看,笔者还带上了前面的分支结构):

import java.util.Scanner;
​
public class TestVar {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入 n: ");
        int end = sc.nextInt(); // 获取用户输入的 n
        int start = 1, result = 0; // start 用来记录当前数的位置; result 用来保存结果
        while (start <= end) {
            if (start != end) {
                System.out.print(start + " + ");
            } else { // 当打印最后一个数时,跟着的符号变成 = 号
                System.out.print(start + " = ");
            }
            result += start; // 进行累加操作
            start++; // 每次循环末尾 start + 1,防止死循环
        }
        System.out.print(result);
    }
}

0x02:循环结构 — do ... while 循环

0x0201:do ... while 循环 — 概念解析

do ... while 循环结构会先执行一次循环体,然后再做判断,看条件是否满足。若条件满足,则继续执行循环体内的代码块,否则,退出循环。do ... while 循环的语法格式如下:

do {
    循环体;
} while (循环条件);

do ... while 循环结构的流程图如下图所示:

0x0202:do ... while 循环 — 案例演示

假设我们现在有这么一个需求,用户输入一个正整数 n,我们想求从 1 加到多少,其结果会大于等于我们输入的 n:

import java.util.Scanner;
​
public class TestVar {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入 n: ");
        int n = sc.nextInt(); // 获取用户输入的 n
        int start = 1, result = 0; // start 用来记录当前数的位置; result 用来保存结果
        do {
            result += start; // 当前结果 + start
            if (result < n) {
                System.out.print(start + " + ");
            } else {
                System.out.print(start + " = " + result + " >= " + n);
            }
            start++; // strat 每轮循环会 + 1
        } while(result < n);
    }
}

0x03:循环结构 — for 循环

0x0301:for 循环 — 概念解析

for 循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for 循环语句的语法格式如下:

for (初始化表达式; 循环条件; 操作表达式) {
    循环体;
}

for 循环的执行流程如下:

  1. 执行 “初始化表达式”。

  2. 判断 “循环条件‘ 是否为 true,为 true 则执行 ”循环体“ 内的内容,否则就退出循环。

  3. 执行 ”循环体“ 内的代码。

  4. 执行 ”操作表达式“ 的代码。

  5. 重复执行 2 - 4 步。

for 循环对应的流程图如下所示:

0x0302:for 循环 — 案例演示

假设我们有这么一个需求,让你计算从 1 加到 10 的所有数字之和,我们可以这么写程序:

public class TestVar {
    public static void main(String[] args) {
        int result = 0;
        for (int i = 1; i <= 10; i++) {
            result += i;
        }
        System.out.println(result);
    }
}

0x04:循环嵌套

除了 if 语句的嵌套,我们循环语句也允许嵌套,我们称之为循环嵌套。for 循环中可以嵌套 for 循环,while 循环中可以嵌套 while 循环,for 和 while 循环也可以相互嵌套。总之,你有需要,随你咋套。

下面我们使用循环嵌套打印一个 ”乘法口诀表“:

public class TestVar {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            // 循环嵌套,for 循环中又嵌套了一个循环
            for (int j = 1; j <= 9; j++) {
                if (j <= i) {
                    System.out.print(i + " x " + j + " = " + (i * j) + "\t");
                }
            }
            System.out.println();
        }
    }
}

0x05:跳转语句

在循环程序中,如果条件一直成立,程序就会一直执行下去,直到不满足条件,才会退出循环。但是如果想中途退出循环(for 循环结束重复之前,while 循环符合结束条件之前),我们该怎么办呢?此时,我们就可以通过 breakcontinue 关键字来实现这一需求。

0x0501:break — 退出循环

使用 break 语句可以完全中止循环。该语句用法十分简单,只要放到循环中你想提前跳出的部分即可。break 语句一般会和 if 语句搭配使用,在循环体的 if 语句中使用 break,可以直接跳出循环。

来看下面这个案例,我们有一个数数程序,我想让他在数到 10 的时候停止:

public class TestVar {
    public static void main(String[] args) {
        for (int i = 0; true; i++) {
            System.out.println(i);
            if (i == 10) {
                break; // 当打印到 10 时退出循环
            }
        }
    }
}

0x0502:continue — 中止本次循环

与 break 相比,continue 语句只能中止本次循环,提前进入到下一次循环中。也就是说,continue 语句不会完全退出循环体。与 break 语句类似,continue 语句一般也会在循环中与 if 语句搭配使用。

同样是一个数数程序,我想当程序数到 5 的时候,跳过:

public class TestVar {
    public static void main(String[] args) {
        for (int i = 0; i <= 10; i++) {
            if (i == 5) {
                continue; // 跳过本次循环, 跳到 i++ 处
            }
            System.out.println(i);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue17 :: Hack3rX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值