全国协议5人面授小班,企业级独立开发考核,转业者的IT软件工程师基地 登录/注册 | 如何报名
当前位置: Java   >  Java 循环语句
admin · 更新于 2021-08-06

1. while 循环

1.1 语法

while循环是最简单的循环形式。我们先来看看它的基本用法:

while (条件) {
    // 循环体,条件成立时执行
    ...}// 循环完成后执行
代码块
  • 1
  • 2
  • 3
  • 4
  • 5

while循环在每次循环开始前,首先会判断条件是否成立,如果计算结果为true, 就会执行循环体内部语句。如果计算结果为false,会跳出循环,执行后续代码。

1.2 实例

对于打印从1到5的例子,可以使用while循环可以这样写:

实例演示
public class WhileLoop1 {
    public static void main(String args[]) {
        int i = 1;
        while (i <= 5) {
            System.out.println(i); // 打印i
            i ++; // i自增1
        }
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
运行案例点击 "运行案例" 可查看在线运行效果

你也许注意到在循环体内部,除了打印变量i的值,还有一个语句:i ++,这个语句的作用是让变量i自增1。如果没有这个语句,i的值永远不会改变,所以循环条件永远成立,程序将陷入死循环,直到将资源耗尽才会停止,所以要杜绝编写死循环代码。

Tips:如果循环的条件永远不会变成 false(比如使用字面量true作为条件),则称这种循环为无限循环或死循环。循环体内的代码会无限地重复执行,直到中断。

再看一个例子,得到1到100的累加和:

实例演示
public class WhileLoop2 {
    public static void main(String[] args) {
        int sum = 0; // 累加和
        int i = 1;
        while (i <= 100) {
            sum = sum + i; // 使sum和i相加,并将值再次赋值给sum
            i ++; // i自增1
        }
        System.out.println("1到100的累加和为:" + sum);
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

1到100的累加和为:5050
代码块
  • 1

我们来对程序进行解析:

  1. 定义两个变量sumi分别用于存放累加和以及要累加的数字
  2. 循环开始前判断条件 i <= 100是否成立,此时 i = 1,成立,执行循环体内代码。
  3. 循环体内代码第一次执行,sum = 1i 自增1变为2。
  4. 再次判断循环条件,成立就继续执行循环体,直到 i = 100,自增1 变为101,此时条件不成立。执行循环后面的代码。
  5. 执行打印语句,打印最终的 sum值,程序结束。

2. do while 循环

2.1 语法

do while循环的功能与while循环类似,不同点在于:while循环是先判断条件,再执行循环体;而do while 循环则是先执行循环体,再判断条件,如果条件成立继续执行循环,条件不成立则终止循环。do while循环的语法如下:

do {
    // 循环体} while (条件);
代码块
  • 1
  • 2
  • 3

无论条件成立与否,do while循环都至少执行一次。而while循环可能一次都不会执行。

2.2 实例

我们现在使用 do while循环实现1到100的累加求和,代码如下:

实例演示
public class DoWhileLoop {
    public static void main(String[] args) {
        int sum = 0; // 累加和
        int i = 1;
        do {
            sum = sum + i; // 使sum和i相加,并将值再次赋值给sum
            i ++; // i自增1
        } while (i <= 100);
        System.out.println("1到100的累加和为:" + sum);
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

1到100的累加和为:5050
代码块
  • 1

3. for 循环

3.1 语法

下面是for循环的语法结构:

for (变量声明; 条件; 迭代语句) {
    // 循环体}
代码块
  • 1
  • 2
  • 3

for循环是一种特殊的while循环,也是被使用最广泛的循环。它使用计数器来实现循环。在关键字 for后面的括号中,会有三个语句,第一个语句是变量声明语句,允许声明一个或多个整型变量;第二个语句是条件,条件的检测方式与while循环相同(每次循环开始前判断条件成立与否);第三个语句是迭代语句,虽然可以是任何语句,但该语句通常用于递增或递减变量。

3.2 实例

我们使用for循环连续打印5行”汉码未来真棒“的字样,代码如下:

实例演示
public class ForLoop1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i ++) {
            System.out.println("汉码未来真棒");
        }
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

汉码未来真棒
汉码未来真棒
汉码未来真棒
汉码未来真棒
汉码未来真棒
代码块
  • 1
  • 2
  • 3
  • 4
  • 5

我们现在使用for来实现1到100的累加求和,代码如下:

实例演示
public class ForLoop2 {
    public static void main(String[] args) {
        int sum = 0; // 累加和
        for (int i = 1; i <= 100; i ++) {
            sum += i; // 加和赋值运算
        }
        System.out.println("1到100的累加和为:" + sum);
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

1到100的累加和为:5050
代码块
  • 1

程序解析:

在执行循环体前,会先执行括号中的变量声明语句int i = 1,它定义了一个计数器变量i并且赋值为1(注意这个语句只执行一次)。然后会执行条件判断语句i <= 100,显然条件成立,执行循环体,循环体执行完成后会才会执行括号中的第三个语句i ++,再次判断条件是否成立,直到当i的值为100时,最后一次执行循环体,这个时候i再次自增1101,条件不成立,结束循环。

实际使用中,通常使用for循环来遍历一个数组,我们将在 Java 数组小节举例介绍。

for循环中第一个语句,变量声明语句可以一次声明多个整型变量,实例代码如下:

实例演示
public class ForLoop2 {
    public static void main(String[] args) {
        for (int i = 1, j = 10; i <= 10; i++, j--) {
            System.out.print(i + "\t");
            System.out.print(j + "\t");
        }
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

1	10	2	9	3	8	4	7	5	6	6	5	7	4	8	3	9	2	10	1
代码块
  • 1

另外,for循环还可以缺省变量声明语句、循环条件和迭代语句,实例:

// 缺省变量声明语句for (int i = 0; ; i ++) {
    // 语句}
代码块
  • 1
  • 2
  • 3
  • 4
// 缺省循环条件语句和迭代语句for (int i = 0; ; ) {
    // 语句}
代码块
  • 1
  • 2
  • 3
  • 4
// 缺省所有语句for (;;) {
    // 语句}
代码块
  • 1
  • 2
  • 3
  • 4

但请注意,通常情况下不建议这样写。

4. for each 循环

由于学习 for each 循环需要一些数组和集合的前置知识,我们将会在 Java 数组小节举例讲解。

5. break 和 continue 关键字

我们可以使用breakcontinue语句来重定向程序执行流。

5.1 break

break关键字可以出现在一个循环中,用以跳出当前循环。我们来看一个实例:

实例演示
public class BreakKeywords1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i ++) {
            if(i == 3) { // 条件语句
                System.out.println("当i等于3时,终止循环!");
                break;
            }
            System.out.println(i);
        }
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

1
2
当i等于3时,终止循环!
代码块
  • 1
  • 2
  • 3

上面是一段循环打印数字的代码,当循环到达第3次迭代时,执行条件分支中的语句,将终止循环。注意:break语句通常配合if语句使用。

对于多层循环的情况,break语句只能终止它自己所在的那一层循环,并不会影响到外层循环。请阅读如下代码:

实例演示
public class BreakKeywords2 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i ++) {
            // 打印i的值
            System.out.println(i);
            for (int j = 1; j<=5; j ++) {
                if(j == 3) { // 条件语句
                    System.out.println("当j等于3时,终止循环!");
                    break;
                }
                // 打印j的值
                System.out.println(j);
            }
        }
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

1
1
2
当j等于3时,终止循环!
2
1
2
当j等于3时,终止循环!
3
1
2
当j等于3时,终止循环!
4
1
2
当j等于3时,终止循环!
5
1
2
当j等于3时,终止循环!
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

上面的代码有两个for循环嵌套,break语句位于内层循环,所以当表达式j == 3成立时,会跳出内层循环,进而继续执行外层循环。

5.2 continue

continue关键字可以跳过当次循环,继续执行下一次循环,我们来看一个实例:

实例演示
public class ContinueKeywords {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i ++) {
            if(i == 3) {
                System.out.println("当i等于3时,跳过~");
                continue;
            }
            System.out.println(i);
        }
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
运行案例点击 "运行案例" 可查看在线运行效果

运行结果:

1
2
当i等于3时,跳过~
4
5
代码块
预览复制
  • 1
  • 2
  • 3
  • 4
  • 5

在多层嵌套的循环中,continue语句只能跳过它自己所在位置的循环。

6. 小结

本节中,我们依次介绍了Java中的四种循环结构:while循环、do while循环、for循环以及for each循环。并且介绍了breakcontinue关键字在循环中的使用。

其中,while循环的循环体可能一次都不执行,而do while循环的循环体至少执行一次。

for 循环通过计数器实现复杂循环。for each循环可以直接遍历数组的每个元素。

在使用循环结构编写业务代码时,为了避免死循环,一定要确保循环条件能够被影响。


为什么选择汉码未来