Java 零基础教程

Java 循环结构

循环结构(Looping structures)是 Java(以及几乎所有编程语言)中最基础、最核心的控制流机制之一。它允许你重复执行一段代码块,只要你设定的特定条件依然为真(true)。

理解并熟练运用循环,对于自动化重复性任务、处理海量数据集合以及创建动态交互式程序相当重要。如果没有循环,为了执行同样的操作 100 次,你就不得不把相同的代码复制粘贴 100 遍——这会让你的程序变得无比冗长、极其低效且根本无法维护。

本章我们将深入探讨 Java 中的三大循环神兵:forwhiledo-while

1. for 循环:精准控制次数的利器

for 循环是一种强大且极其灵活的循环结构。当你在执行前就已经明确知道代码需要重复多少次时,它是最完美的选择。它巧妙地将“初始化计数器”、“判断是否继续的条件”以及“更新计数器”这三个核心要素集中在了一行代码中,极其简洁。

1.1 for 循环的语法

for 循环的标准语法如下:

for (初始化; 条件判断; 步进/更新) {
    // 需要被重复执行的代码块
}

让我们把 for 循环拆解开来:

  • 初始化 (Initialization): 这部分只在循环开始前执行一次。它通常用来声明并初始化一个计数器变量。例如:int i = 0;
  • 条件判断 (Condition): 这是一个布尔表达式,在每次循环迭代之前都会被评估。如果条件为 true,则执行循环体内的代码。如果为 false,循环立即终止。例如:i < 10;
  • 步进/更新 (Increment/Decrement): 这部分在每次循环体代码执行完毕之后运行。它通常用于更新(递增或递减)计数器变量。例如:i++i--

1.2 实战演练

示例 1:打印数字 1 到 10

public class ForLoopExample {
    public static void main(String[] args) {
        // 1. 初始化 i 为 1
        // 2. 只要 i <= 10,就继续循环
        // 3. 每次循环结束后,将 i 的值加 1 (i++)
        for (int i = 1; i <= 10; i++) {
            System.out.println(i); // 打印当前 i 的值
        }
    }
}

示例 2:倒序循环 (递减)

public class ForLoopDecrementExample {
    public static void main(String[] args) {
        // 从 10 开始,只要 i >= 1 就继续,每次循环后 i 减 1 (i--)
        for (int i = 10; i >= 1; i--) {
            System.out.println("倒计时: " + i);
        }
    }
}

1.3 增强型 for 循环 (for-each 循环)

Java 还提供了一种“增强型 for 循环”(俗称 for-each 循环),它专门用于极度简化数组 (Arrays) 或集合 (Collections) 的遍历操作。

语法:

for (数据类型 变量名 : 数组或集合) {
    // 针对每个元素执行的代码
}

示例:遍历数组

public class EnhancedForLoopExample {
    public static void main(String[] args) {
        int[] numbers = {10, 20, 30, 40, 50};
        
        // 读法:"对于 numbers 数组中的每一个 int 类型的 number..."
        // 循环会自动把数组里的值依次赋给 'number' 变量
        for (int number : numbers) {
            System.out.println("元素值: " + number);
        }
    }
}
注:这种写法比传统的 for (int i = 0; i < numbers.length; i++) 更加优雅,且彻底杜绝了“数组越界”的风险。

2. while 循环:未知次数的持续探索

while 循环是另一种基础循环。只要你设定的条件为 true,它就会一直重复执行代码块。与 for 循环不同,while 循环没有内置的初始化和步进机制,你必须自己在循环外部初始化变量,并在循环体内部手动更新它

2.1 while 循环的语法

while (条件判断) {
    // 需要被重复执行的代码块
}

2.2 实战演练

示例 1:打印数字 1 到 5

public class WhileLoopExample {
    public static void main(String[] args) {
        int i = 1; // 1. 手动初始化计数器

        while (i <= 5) { // 2. 条件判断
            System.out.println(i);
            i++; // 3. 极其重要:手动更新计数器!如果不加这句,程序将陷入死循环!
        }
    }
}

示例 2:互动式程序 (持续读取输入)

while 循环极其适合用于“不知道到底要循环多少次”的场景,比如等待用户的特定输入。

import java.util.Scanner;

public class WhileLoopInputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number = 0;
        
        // 只要用户输入的不是 -1,循环就一直继续
        while (number != -1) {
            System.out.print("请输入一个数字 (输入 -1 退出): ");
            number = scanner.nextInt();
            
            if (number != -1) {
                System.out.println("你输入了: " + number);
            }
        }
        System.out.println("程序正在退出...");
        scanner.close();
    }
}

3. do-while 循环:先斩后奏,至少执行一次

do-while 循环与 while 循环非常相似,但有一个极其关键的区别:它的条件判断是在循环体执行完毕之后才进行的。这意味着,无论初始条件是真还是假,do-while 循环的代码块都保证至少会被执行一次

3.1 do-while 循环的语法

do {
    // 需要被重复执行的代码块 (至少执行一次)
} while (条件判断); // 注意:这里必须以分号 ; 结尾!

3.2 实战演练

示例:极佳的用户输入校验方案

do-while 是做“输入校验”和“菜单显示”的完美工具,因为你总需要先让用户输入一次(或先看一次菜单),然后再去检查输入是否合法。

import java.util.Scanner;

public class DoWhileLoopInputValidation {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int age;
        
        // 先要求输入,再去检查。如果不合法,就一直循环要求重新输入。
        do {
            System.out.print("请输入您的年龄 (0-120): ");
            age = scanner.nextInt();
            
            if (age < 0 || age > 120) {
                System.out.println("年龄不合法,请重新输入!");
            }
            
        } while (age < 0 || age > 120); // 如果输入依然不合法,继续循环
        
        System.out.println("校验通过,您输入的合法年龄是: " + age);
        scanner.close();
    }
}

4. 指南:我该选择哪种循环?

虽然很多时候这三种循环可以互相替换实现相同的功能,但在特定的场景下,选择最合适的那一个会让你的代码更加优雅和易读:

  • for 循环: 绝对的首选,当你明确知道循环的次数时(例如:“打印 10 次”、“遍历这个有 5 个元素的数组”)。
  • while 循环: 当你不知道具体要循环多少次,但知道循环停止的条件时。特别适合依赖外部因素或用户实时输入的场景(例如:“一直读取文件直到末尾”、“一直循环直到用户点击退出”)。
  • do-while 循环: 当你无论如何都必须先让代码执行一次,然后再根据情况决定是否继续时。最典型的场景就是“展示控制台菜单”和“强制用户重新输入合法数据”。