循环是编程中最重要的控制结构之一,它允许我们重复执行同一段代码直到满足特定条件。在Java中,主要有三种循环结构:for
循环、while
循环和do-while
循环。本文将详细介绍每种循环的用法、特点以及实际应用场景,并通过丰富的代码示例帮助你掌握这些概念。
一、for循环
for
循环是最常用的循环结构,特别适合已知循环次数的情况。它的基本语法如下:
javafor (初始化语句; 循环条件; 迭代语句) {
// 循环体
}
1. 基本for循环示例
javapublic class ForLoopExample {
public static void main(String[] args) {
// 打印1到10的数字
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
// 输出: 1 2 3 4 5 6 7 8 9 10
}
}
2. 增强for循环(for-each)
Java 5引入了增强for循环,用于遍历数组或集合:
javapublic class EnhancedForLoop {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
// 使用增强for循环遍历数组
for (int num : numbers) {
System.out.print(num + " ");
}
// 输出: 10 20 30 40 50
}
}
3. 嵌套for循环
javapublic class NestedForLoop {
public static void main(String[] args) {
// 打印乘法表
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();
}
}
}
二、while循环
while
循环在每次迭代前检查条件,适合不确定循环次数但知道循环条件的情况。
javawhile (循环条件) {
// 循环体
// 通常需要包含改变循环条件的语句
}
1. 基本while循环示例
javapublic class WhileLoopExample {
public static void main(String[] args) {
int count = 1;
// 打印1到5的数字
while (count <= 5) {
System.out.print(count + " ");
count++;
}
// 输出: 1 2 3 4 5
}
}
2. 无限循环
当循环条件永远为真时,会形成无限循环:
javapublic class InfiniteLoop {
public static void main(String[] args) {
// 无限循环(通常需要配合break语句退出)
while (true) {
System.out.println("这是一个无限循环,按Ctrl+C终止");
// 实际应用中会有break条件
}
}
}
三、do-while循环
do-while
循环与while
类似,但会先执行一次循环体再检查条件,确保循环体至少执行一次。
javado {
// 循环体
} while (循环条件);
1. 基本do-while示例
javapublic class DoWhileExample {
public static void main(String[] args) {
int i = 1;
do {
System.out.print(i + " ");
i++;
} while (i <= 5);
// 输出: 1 2 3 4 5
}
}
2. 用户输入验证示例
javaimport java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number;
do {
System.out.print("请输入一个1-100之间的数字: ");
number = scanner.nextInt();
} while (number < 1 || number > 100);
System.out.println("你输入的数字是: " + number);
scanner.close();
}
}
四、循环控制语句
Java提供了break
和continue
语句来控制循环的执行流程。
1. break语句
break
用于立即退出当前循环:
javapublic class BreakExample {
public static void main(String[] args) {
// 找到第一个能被3和5整除的数
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0 && i % 5 == 0) {
System.out.println("找到的数字是: " + i);
break; // 找到后退出循环
}
}
}
}
2. continue语句
continue
跳过当前迭代,直接进入下一次循环:
javapublic class ContinueExample {
public static void main(String[] args) {
// 打印1-10之间的奇数
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
System.out.print(i + " ");
}
// 输出: 1 3 5 7 9
}
}
3. 标签与break/continue
可以使用标签来控制多层嵌套循环:
javapublic class LabeledLoop {
public static void main(String[] args) {
outerLoop: // 定义标签
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
if (i * j > 6) {
System.out.println("Breaking outer loop");
break outerLoop; // 跳出外层循环
}
System.out.print(i * j + "\t");
}
System.out.println();
}
}
}
五、实际应用案例
1. 计算阶乘
javapublic class FactorialCalculation {
public static void main(String[] args) {
int number = 5;
long factorial = 1;
for (int i = 1; i <= number; i++) {
factorial *= i;
}
System.out.println(number + "的阶乘是: " + factorial);
// 输出: 5的阶乘是: 120
}
}
2. 斐波那契数列
javapublic class FibonacciSeries {
public static void main(String[] args) {
int n = 10; // 生成前10个斐波那契数
int t1 = 0, t2 = 1;
System.out.print("斐波那契数列前" + n + "项: ");
for (int i = 1; i <= n; i++) {
System.out.print(t1 + " ");
int sum = t1 + t2;
t1 = t2;
t2 = sum;
}
// 输出: 斐波那契数列前10项: 0 1 1 2 3 5 8 13 21 34
}
}
3. 素数判断
javapublic class PrimeNumberCheck {
public static void main(String[] args) {
int number = 29;
boolean isPrime = true;
if (number <= 1) {
isPrime = false;
} else {
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
isPrime = false;
break;
}
}
}
System.out.println(number + (isPrime ? "是素数" : "不是素数"));
// 输出: 29是素数
}
}
六、循环性能考虑
- 避免在循环中创建对象:这会导致频繁的垃圾回收
- 尽量减少循环内部的计算:将不变量移到循环外部
- 选择合适的循环结构:已知次数用for,不确定次数用while
- 注意循环边界条件:防止数组越界或无限循环
七、总结
for
循环:适合已知循环次数的情况,语法简洁while
循环:适合不确定循环次数但知道条件的情况do-while
循环:确保循环体至少执行一次break
:立即退出循环continue
:跳过当前迭代- 标签:用于控制多层嵌套循环
掌握这些循环结构是成为熟练Java程序员的基础。通过不断练习和实践,你将能够更高效地解决各种编程问题。记住,选择哪种循环结构取决于具体场景和代码可读性。