【Java基础】循环

1. 循环的四个要素

  • 循环体:指要循环执行的语句
  • 循环条件:指能使得循环继续进行下去的条件,必须为 boolean类型
  • 初始条件:指循环开始前的变量初始化,一般为循环控制变量的初始化
  • 迭代条件:指一次循环结束后对循环控制变量进行更改的语句
通常情况下,循环结束都是因为循环条件语句返回了false

2. 三大循环语句

2.1 for循环

for(初始条件 ; 循环条件 ; 迭代条件){
    循环体;
}

for循环各个要素执行的顺序如下:

初始条件 -> 循环条件 -> 循环体 -> 迭代条件 -> 循环条件 -> 循环体 ......

2.2 while循环

初始条件
while(循环条件){
    循环体;
    迭代条件;
}

while循环各个要素执行顺序如下(与for循环相同):

初始条件 -> 循环条件 -> 循环体 -> 迭代条件 -> 循环条件 -> 循环体 ......

注意:编写while循环时一定要注意不要漏掉迭代条件

for与while的总结:

  1. 实际开发过程中,一般会总for和while中进行选择以实现循环结构。
  2. for循环和while循环可以相互转换,具体使用哪个取决于实际开发环境:遍历数组和字符串一般使用for循环,若初始条件较多较复杂,则优先选用while。
  3. for循环与while循环的区别是初始条件的作用范围不同。
  4. 写程序过程中一定要避免产生死循环。

2.3 do-while循环

初始条件
do{
    循环体;
    迭代条件;
}while(循环条件);

do-while循环各个要素执行顺序如下(先执行一遍循环体再进行循环条件判断):

初始条件 -> 循环体 -> 迭代条件 -> 循环条件 -> 循环体 ......

说明:

  1. do-while 循环至少会执行一次循环体
  2. 开发中较少使用do-while结构

3. “无限”循环结构——while(true) 与 for(;;)

注意:理论上应当避免这种写法,但是在某些特殊场景使用这些很方便,比如对循环次数不确定的情况,大多用在系统底层或者嵌入式开发中。使用这一结构时一定要在循环体中添加一定条件下的退出循环操作:

  • 方式一:将循环条件置位false
  • 方式二:执行break

4. 循环嵌套

4.1 概念:将一个循环A声明在另一个循环结构B的循环体中

  • 内层循环:循环结构A
  • 外层循环:循环结构B

4.2 说明:

  1. 内层循环结构遍历一遍,相当于外层循环体执行了一次
  2. 假设外层循环需要执行m次,内层循环需要执行n次,此时内层循环的循环体一共执行了m*n
  3. 外层循环控制行数,内层循环控制列数

4.3 典型例子:

4.3.1. 打印乘法表

/*
 * 打印9 9乘法表
 * */
public class NineNineTable {
    public static void main(String[] args) {
        int num = 99;
        for (int i = 1; i <= num; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }
}

4.3.2. 输出100以内的质数

/*
* 质数输出
* */
public class PrimeNumberTest2 {
    public static void main(String[] args) {
        boolean isPrime;
        for (int i = 2; i <= 100000; i++) {
            isPrime = true;
            for (int j = 2; j <= Math.sqrt(i); j++) {// 优化点二:仅遍历到当前数的二分之一次方即可
                if (i % j == 0) {
                    isPrime = false;
                    break;//优化点一,可以减少没意义的遍历,只对非质数有效
                }
            }
            if (isPrime) {
                System.out.println(i );
            }
        }
    }
}

5. break与continue

使用范围循环中的作用相同点
breakswitch-case,循环结构中结束当前循环关键字后不能声明语句
continue循环机构中结束当次循环关键字后不能声明语句
还有一种带标签的break和continue,其使用较少,对代码的可读性有一定影响。

6. 补充:如何衡量一个代码的优劣

  1. 正确性:代码运行后要得到正确的结果。
  2. 可读性:代码一定要逻辑清晰,易被他人和日后的自己读懂,对bug的修改和工作的交接有很重要的作用。
  3. 健壮性:对于异常输入要有对应的处理。
  4. 高效率与低存储:运行速度要尽可能快,运行内存要尽可能低,即时空复杂度概念。
最后修改:2021 年 03 月 01 日
如果觉得我的文章对你有用,请随意赞赏