Skip to content

Java 循环控制

循环是编程中基本的控制结构,允许你重复执行一个代码块,只要某个条件仍然为真,或者执行特定次数的迭代。

Java 提供了几种循环机制:

  • while 循环:只要条件为真就重复执行一个代码块(在每次迭代之前检查)。
  • do...while 循环:类似于 while,但在代码块执行之后检查条件,保证至少执行一次。
  • for 循环:通常用于事先已知迭代次数的情况。它在每次迭代中初始化计数器、检查条件并更新计数器。
  • 增强型 for 循环(或 for-each 循环):提供了一种简洁的方式来遍历数组或集合中的元素。

while 循环只要给定的布尔条件为 true,就重复执行目标语句。条件在循环体执行之前检查。

while (boolean_expression) {
// 重复执行的语句
// 通常包含最终使表达式为假的逻辑
}

流程:首先评估 boolean_expression。如果为 true,则执行循环体内的语句。然后,再次评估表达式。这个过程重复进行,直到表达式变为 false。如果表达式最初就是 false,则循环体永远不会执行。

public class WhileLoopExample {
public static void main(String[] args) {
int count = 0; // 初始化
while (count < 5) { // 条件检查
System.out.println("Current count: " + count);
count++; // 更新(避免无限循环至关重要!)
}
System.out.println("Loop finished.");
}
}

输出:

Current count: 0
Current count: 1
Current count: 2
Current count: 3
Current count: 4
Loop finished.

do...while 循环类似于 while 循环,但条件在循环体执行之后测试。这保证了即使条件最初为假,循环体也至少会运行一次。

do {
// 要执行的语句
// 更新逻辑通常在这里
} while (boolean_expression);

流程:首先执行循环体内的语句。然后,评估 boolean_expression。如果为 true,则循环重复。如果为 false,则循环终止。

import java.util.Scanner;
public class DoWhileExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number;
do {
System.out.print("Enter a positive number (or 0 to exit): ");
number = scanner.nextInt();
if (number > 0) {
System.out.println("You entered: " + number);
}
} while (number > 0); // 在执行后检查条件
System.out.println("Exiting program.");
scanner.close();
}
}

示例交互:

Enter a positive number (or 0 to exit): 10
You entered: 10
Enter a positive number (or 0 to exit): 5
You entered: 5
Enter a positive number (or 0 to exit): 0
Exiting program.

for 循环提供了一种简洁的方式来迭代特定次数。它将循环控制变量的初始化、条件检查和更新结合到一行中。

for (initialization; boolean_expression; update) {
// 要执行的语句
}

控制流程:

  1. 初始化 (Initialization): 在最开始时执行一次。通常声明并初始化一个循环计数器变量(例如,int i = 0)。
  2. 条件检查 (Condition Check): boolean_expression 在每次迭代之前(包括第一次)求值。如果为 true,则执行循环体。如果为 false,则循环终止。
  3. 循环体执行 (Loop Body Execution): 如果条件为 true,则执行循环体内的语句。
  4. 更新 (Update): 在每次迭代的循环体执行完毕后执行。通常递增或递减循环计数器(例如,i++,i--)。
  5. 流程然后返回步骤 2(条件检查)。
public class ForLoopExample {
public static void main(String[] args) {
// 从 0 循环到 5(不包括 5)
for (int i = 0; i < 5; i++) {
System.out.println("Iteration number: " + i);
}
System.out.println("For loop finished.");
}
}

输出:

Iteration number: 0
Iteration number: 1
Iteration number: 2
Iteration number: 3
Iteration number: 4
For loop finished.

增强型 for 循环于 Java 5 引入,简化了对数组和集合的迭代。它消除了对索引管理的需要。

for (ElementType element : collectionOrArray) {
// 使用 'element' 的语句
}
  • ElementType:集合或数组中元素的 数据类型。
  • element:在循环中声明的变量名。在每次迭代中,它持有序列中的当前元素。
  • collectionOrArray:要迭代的数组或集合对象(例如,ArrayList、HashSet)。
import java.util.ArrayList;
import java.util.List;
public class EnhancedForExample {
public static void main(String[] args) {
// 数组示例
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("Iterating over array:");
for (int number : numbers) {
System.out.print(number + " ");
}
System.out.println("\n");
// List(集合)示例
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
System.out.println("Iterating over List:");
for (String name : names) {
System.out.print(name + " ");
}
System.out.println();
}
}

输出:

Iterating over array:
10 20 30 40 50
Iterating over List:
Alice Bob Charlie

Java 提供了一些语句来改变循环执行的正常流程。

break 关键字用于立即终止最内层循环(while、do-while、for)或 switch 语句。执行会跳到被终止的循环或 switch 之后的语句。

`break;`
public class BreakExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int number : numbers) {
if (number == 30) {
System.out.println("Found 30, breaking loop.");
break; // 立即退出循环
}
System.out.println("Processing: " + number);
}
System.out.println("After the loop.");
}
}

输出:

Processing: 10
Processing: 20
Found 30, breaking loop.
After the loop.

continue 关键字跳过最内层循环(while、do-while、for)当前迭代的其余部分,并直接进入下一次迭代。

  • 在 for 循环中,continue 会跳到更新语句。
  • 在 while 或 do-while 循环中,continue 会跳到条件检查。
`continue;`
public class ContinueExample {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
if (i == 3) {
System.out.println("Skipping iteration 3.");
continue; // 跳过本次迭代的其余部分
}
System.out.println("Processing iteration: " + i);
}
System.out.println("Loop finished.");
}
}

输出:

Processing iteration: 1
Processing iteration: 2
Skipping iteration 3.
Processing iteration: 4
Processing iteration: 5
Loop finished.
  • 当你知道(或可以计算出)迭代次数时,使用 for 循环。
  • 当需要简单地遍历数组或集合中的所有元素,且不需要索引时,使用增强型 for (for-each) 循环。
  • 当你需要根据条件进行循环,并且事先不知道迭代次数时,使用 while 循环。它也适用于循环可能根本不需要执行的情况。
  • 当你需要循环体至少执行一次,然后在检查条件时,使用 do-while 循环。

在学习了判断和循环之后,接下来的章节将更详细地探讨特定的数据类型,如数字、字符和字符串,以及相关的操作和方法。