引言

顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,就需要使用循环结构。

Java 中有三种主要的循环结构:

  • while 循环

  • do…while 循环

  • for 循环

在 Java5 中引入了一种主要用于数组的增强型 for 循环。

while 循环

while 是最基本的循环,它的结构为:

while( 布尔表达式 ) {
	//循环内容
}

只要布尔表达式为 true,循环体会一直执行下去。

public class Test {
   public static void main(String args[]) {
      int x = 10;
      while( x < 20 ) {
          System.out.print("value of x : " + x );
          x++;
          System.out.print("\n");
      }
   } 
} 

以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

do…while 循环

对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

do {
       //代码语句
}while(布尔表达式);

注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。

public class Test {
   public static void main(String args[]){
      int x = 10;

      do{
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }while( x < 20 );
   }
}

以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

for 循环

虽然所有循环结构都可以用 while 或者 do...while 表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。

for 循环执行的次数是在执行前就确定的。语法格式如下:

for(初始化; 布尔表达式; 更新) {
    //代码语句
}

关于 for 循环有以下几点说明:

  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。

  • 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为 false,循环终止,开始执行循环体后面的语句。

  • 执行一次循环后,更新循环控制变量。

  • 再次检测布尔表达式。循环执行上面的过程。

public class Test {
   public static void main(String args[]) {
      for(int x = 10; x < 20; x = x+1) {
          System.out.print("value of x : " + x );
          System.out.print("\n");
      }
   } 
} 

以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

Java 增强 for 循环

Java5 引入了一种主要用于数组的增强型 for 循环。

Java 增强 for 循环语法格式如下:

for(声明语句 : 表达式)
{
   //代码句子
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

public class Test {
   public static void main(String args[]){
      int [] numbers = {10, 20, 30, 40, 50};

      for(int x : numbers ){
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      for( String name : names ) {
         System.out.print( name );
         System.out.print(",");
      }
   }
}

以上实例编译运行结果如下:

10,20,30,40,50,
James,Larry,Tom,Lacy,

break 关键字

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。

break 跳出最里层的循环,并且继续执行该循环下面的语句。

语法

break 的用法很简单,就是循环结构中的一条语句:

break;

实例

public class Test {
   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};

      for(int x : numbers ) {
         if( x == 30 ) {
	      break;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}

以上实例编译运行结果如下:

10
20

continue 关键字

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

在 for 循环中,continue 语句使程序立即跳转到更新语句。

在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

语法

continue 就是循环体中一条简单的语句:

continue;

实例

public class Test {
   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};

      for(int x : numbers ) {
         if( x == 30 ) {
	      continue;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}

以上实例编译运行结果如下:

10
20
40
50

练习作业

题目一

计算某个整数的阶乘

编写一个 Java 程序,使用 while 循环计算给定整数的阶乘。阶乘是指将一个整数与小于它的所有正整数相乘的结果。

要求:

  • 提示用户输入一个整数 n(n >= 0)。

  • 使用 while 循环计算 n 的阶乘。

  • 输出计算结果。

示例输出:

请输入一个整数: 5
5的阶乘为: 120

提示:

  • 阶乘的定义是 n! = n (n-1) (n-2) ... 2 * 1。

  • 可以使用一个变量来保存阶乘的结果,初始值为 1。

  • 使用一个变量 i 来迭代从 n 减少到 1 的值。

  • 在循环体内,将当前结果乘以 i,并将 i 减少 1。

  • 循环结束后,输出计算结果。

题目二

猜数字游戏

编写一个 Java 程序,使用 do...while 循环实现一个猜数字的游戏。程序会随机生成一个 1 到 100 之间的整数,然后提示用户猜这个数字是多少。

要求:

  • 程序开始时生成一个随机数作为目标数字。

  • 提示用户输入一个整数作为猜测。

  • 如果猜测的数字与目标数字相等,则输出猜对了,并结束程序。

  • 如果猜测的数字比目标数字大,则输出猜大了,并提示用户继续猜测。

  • 如果猜测的数字比目标数字小,则输出猜小了,并提示用户继续猜测。

  • 用户可以继续猜测,直到猜对为止。

示例输出:

猜数字游戏开始!
请猜一个 1 到 100 之间的整数: 50
猜小了!请继续猜测: 75
猜大了!请继续猜测: 63
猜小了!请继续猜测: 68
猜对了!游戏结束。

提示:

  • 可以使用 java.util.Random 类生成随机数。

  • 可以使用 java.util.Scanner 类获取用户的输入。

题目三

打印九九乘法表

编写一个 Java 程序,使用 for 循环打印出九九乘法表。

要求:

  • 使用嵌套的 for 循环实现。

  • 打印的乘法表应该是 1x1、1x2、...、9x9 的形式。

  • 每行打印一个乘法表的一部分,不同行之间用换行符分隔。

示例输出:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
...
1x9=9 2x9=18 3x9=27 ... 9x9=81

提示:

  • 可以使用两个嵌套的 for 循环,外层循环控制被乘数,内层循环控制乘数。

  • 在内层循环中,使用被乘数和乘数的值相乘,并将结果打印出来。

题目四

计算数组元素的总和

编写一个 Java 程序,使用增强 for 循环计算给定整数数组中所有元素的总和。

要求:

  • 定义一个整数数组,可以在代码中预先初始化或者通过用户输入进行初始化。

  • 使用增强 for 循环遍历数组中的每个元素。

  • 将每个元素累加到一个变量中,得到数组元素的总和。

  • 输出计算结果。

示例输出:

数组元素:[5, 10, 15, 20, 25]
数组元素的总和:75

提示:

  • 可以使用一个变量来保存数组元素的总和,初始值为 0。

  • 使用增强 for 循环遍历数组中的每个元素,并将每个元素累加到总和变量中。

  • 循环结束后,输出计算结果。

参考答案

题目一

import java.util.Scanner;

public class FactorialCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个整数: ");
        int n = scanner.nextInt();

        int factorial = 1;
        int i = n;

        while (i >= 1) {
            factorial *= i;
            i--;
        }

        System.out.println(n + "的阶乘为: " + factorial);

        scanner.close();
    }
}

这段代码会提示用户输入一个整数 n,并使用 while 循环计算 n 的阶乘。循环从 n 开始递减到 1,每次将当前结果与 i 相乘,并将 i 减少 1,直到 i 的值为 1。最后,程序会输出计算结果。

题目二

import java.util.Random;
import java.util.Scanner;

public class GuessNumberGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();

        int targetNumber = random.nextInt(100) + 1;
        int guess;

        System.out.println("猜数字游戏开始!");
        do {
            System.out.print("请猜一个 1 到 100 之间的整数: ");
            guess = scanner.nextInt();

            if (guess == targetNumber) {
                System.out.println("猜对了!游戏结束。");
            } else if (guess > targetNumber) {
                System.out.println("猜大了!请继续猜测。");
            } else {
                System.out.println("猜小了!请继续猜测。");
            }
        } while (guess != targetNumber);

        scanner.close();
    }
}

这段代码实现了一个猜数字的游戏。程序开始时,会生成一个随机数作为目标数字。然后,使用 do...while 循环提示用户输入猜测的数字,并根据猜测结果输出相应的提示信息。如果猜测的数字与目标数字相等,则输出猜对了,并结束程序。如果猜测的数字大于目标数字,则输出猜大了,并提示用户继续猜测。如果猜测的数字小于目标数字,则输出猜小了,并提示用户继续猜测。用户可以继续猜测,直到猜对为止。

题目三

public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                int result = i * j;
                System.out.print(j + "x" + i + "=" + result + " ");
            }
            System.out.println();
        }
    }
}

这段代码使用嵌套的 for 循环打印出了九九乘法表。外层循环控制被乘数,内层循环控制乘数。在内层循环中,将被乘数和乘数相乘得到结果,并将其打印出来。外层循环每执行一次,就换行输出一行乘法表。

题目四

public class ArraySum {
    public static void main(String[] args) {
        int[] array = {5, 10, 15, 20, 25};
        int sum = 0;

        for (int num : array) {
            sum += num;
        }

        System.out.println("数组元素:" + Arrays.toString(array));
        System.out.println("数组元素的总和:" + sum);
    }
}

这段代码使用增强 for 循环计算了给定整数数组中所有元素的总和。首先,我们定义了一个整数数组,并初始化它。然后,使用增强 for 循环遍历数组中的每个元素,将每个元素累加到总和变量中。最后,输出数组元素和数组元素的总和。