0
点赞
收藏
分享

微信扫一扫

Java循环结构详解:从基础到实践

循环是编程中最重要的控制结构之一,它允许我们重复执行同一段代码直到满足特定条件。在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提供了breakcontinue语句来控制循环的执行流程。

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是素数
     }
 }

六、循环性能考虑

  1. 避免在循环中创建对象:这会导致频繁的垃圾回收
  2. 尽量减少循环内部的计算:将不变量移到循环外部
  3. 选择合适的循环结构:已知次数用for,不确定次数用while
  4. 注意循环边界条件:防止数组越界或无限循环

七、总结

  • for循环:适合已知循环次数的情况,语法简洁
  • while循环:适合不确定循环次数但知道条件的情况
  • do-while循环:确保循环体至少执行一次
  • break:立即退出循环
  • continue:跳过当前迭代
  • 标签:用于控制多层嵌套循环

掌握这些循环结构是成为熟练Java程序员的基础。通过不断练习和实践,你将能够更高效地解决各种编程问题。记住,选择哪种循环结构取决于具体场景和代码可读性。

举报

相关推荐

0 条评论