Java笔记——流程控制

前言:

       流程控制:用来控制程序中各个语句执行顺序,将语句组合成可以完成一定功能的小逻辑模块。

在设计程序时,规定的流程结构有三种:

  1. 顺序结构:程序从上到下执行,中间过程中没有任何判断和跳转。
  2. 分支结构:根据条件,选择性的执行某段代码;例:if-else语句和switch-case语句。
  3. 循环结构:根据循环结构,重复性的执行某段代码;例:for、while、do-while。

1.分支语句

1.1 if-else结构

1.1.1 单分支条件判断

if(条件表达式) {

       语句块;

}

执行流程:

  1. 运行结果为true,执行代码块。
  2. 结果为false,结束运行。

流程图:

1.1.2 双分支条件判断

if(条件表达式){

      语句块1;     

}else{

      语句块2;

}

执行流程:

  1. 结果为true,执行语句1。
  2. 结果为false,执行语句2。

流程图:

1.1.3 多分支条件判断

if(条件表达式){

      语句块1;     

}else{

      语句块2;

}

...

}else if(条件表达式n){

      语句块n;

} else{

      语句块n+1;

}

执行流程:

  1. 先判断关系表达式1结果为true还是false。
  2. 如果为true,执行语句块1,然后结束当前多分支。
  3. 如果是false,就继续判断关系表达式2的结果为true还是false(下同)

流程图:

1.1.4 if-else的嵌套使用示例

假设我们想根据一个学生的分数判断他的成绩等级。具体来说,我们可以定义如下等级:

  • 90分及以上:优秀
  • 80到89分:良好
  • 70到79分:中等
  • 60到69分:及格
  • 60分以下:不及格
//这里使用了Scanner类从键盘获取数据
import java.util.Scanner;
public class Person{
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            // 输入学生分数
            System.out.print("请输入学生的分数: ");
            int score = scanner.nextInt();

            // 嵌套if-else语句来判断成绩等级
            if (score >= 90) {
                System.out.println("成绩等级: 优秀");
            } else if (score >= 80) {
                System.out.println("成绩等级: 良好");
            } else if (score >= 70) {
                System.out.println("成绩等级: 中等");
            } else if (score >= 60) {
                System.out.println("成绩等级: 及格");
            } else {
                System.out.println("成绩等级: 不及格");
            }

            scanner.close();
        }
}

结果:

 

1.2 switch-case结构

1.2.1 格式与执行流程

switch(表达式){

      case 常量值1:

            语句块1;

            break;

      case 常量值2:

            语句块2;

            break;

      ...

      [default:

            语句块n=1;

            break;           

      ]

}

执行过程:

  1. 首先计算表达式的值,并与每个case标签进行比较。
  2. 找到第一个匹配的case后,执行对应的代码块。
  3. 如果没有匹配的case,可以选择执行default块。
  4. 如果没有使用break,控制流将继续执行下一个case,直到遇到break或结束整个switch。
  5. 一旦执行了break,或所有case都执行完毕,控制流将跳出switch结构。

流程图:

1.2.2 示例

题目:输入1-7 判断并输出星期几

import java.util.Scanner;

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

        // 输入星期几
        System.out.print("请输入一个数字(1-7)代表星期几: ");
        int day = scanner.nextInt();

        // switch-case 结构
        switch (day) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期天");
                break;
            default:
                System.out.println("无效的输入,请输入1到7之间的数字。");
                break;
        }

        scanner.close();
    }
}

结果:

 

1.2.3 注意事项

  1. switch中的表达式只能是特定的数据类型,如:byte \ short \ char \ int \ enum \ String()

2.循环语句

概念:循环语句具有在某些条件满足的情况下,反复执行特定代码的功能。

循环结构四要素:

  1. 初始化部分
  2. 循环条件部分
  3. 循环体部分
  4. 迭代部分

2.1 for循环

2.1.1 for循环结构

说明:for循环是一种控制结构,用于重复执行一段代码块,直到满足特定条件。for循环通常用于已知次数的迭代。

for (初始化①; 条件②; 迭代④) {

      循环体③

}

执行过程:①-②-③-④-②-③-④...

2.1.2 示例

题目:遍历1到100以内的偶数,并计算偶数的个数和它们的总和

public class Person {
    public static void main(String[] args) {
        int count = 0;  // 用于记录偶数的个数
        int sum = 0;    // 用于计算偶数的和

        // 使用for循环遍历1到100的数字
        for (int i = 1; i <= 100; i++) {
            // 检查当前数字是否为偶数
            if (i % 2 == 0) {
                count++;       // 偶数个数加1
                sum += i;      // 累加偶数到sum
            }
        }

        // 输出结果
        System.out.println("1到100之间的偶数个数: " + count);
        System.out.println("1到100之间的偶数的和: " + sum);
    }
}

2.2 while循环

2.2.1 while循环结构

说明:在条件为true时反复执行循环体,直到条件为falsewhile循环适用于在不确定循环次数的情况下反复执行的场景。

while (条件) {

        循环体

}

2.2.2 示例

题目:使用while循环遍历1到100的偶数

public class Person {
    public static void main(String[] args) {
        int i = 1;        // 循环变量,从1开始
        int count = 0;   // 用于记录偶数的个数
        int sum = 0;     // 用于计算偶数的和

        // 使用while循环遍历1到100的数字
        while (i <= 100) {
            // 检查当前数字是否为偶数
            if (i % 2 == 0) {
                count++;       // 偶数个数加1
                sum += i;      // 累加偶数到sum
            }
            i++; // 增加循环变量,避免无限循环
        }

        // 输出结果
        System.out.println("1到100之间的偶数个数: " + count);
        System.out.println("1到100之间的偶数的和: " + sum);
    }
}

结果:

2.3 do-while循环

2.3.1 do-while结构

说明:do-while循环会 先执行一次循环体,然后再检查循环条件。也就是说,do-while循环至少会执行一次,即使条件一开始就是false

do {

       循环体

} while (条件);

2.3.2 示例

题目:使用 do-while 循环遍历1到100的偶数

public class Person {
    public static void main(String[] args) {
        int i = 1;        // 循环变量,从1开始
        int count = 0;    // 用于记录偶数的个数
        int sum = 0;      // 用于计算偶数的和

        // 使用 do-while 循环遍历 1 到 100 的数字
        do {
            // 检查当前数字是否为偶数
            if (i % 2 == 0) {
                count++;       // 偶数个数加 1
                sum += i;      // 累加偶数到 sum
            }
            i++; // 增加循环变量,避免无限循环
        } while (i <= 100); // 循环条件,直到 i 超过 100

        // 输出结果
        System.out.println("1到100之间的偶数个数: " + count);
        System.out.println("1到100之间的偶数的和: " + sum);
    }
}

结果:

2.4 无限循环结构

2.4.1 无限循环的结构

说明:它会不断重复执行某段代码,直到程序被强制停止或循环内部存在某种条件来中断循环。

1. 使用 while 循环
while (true) {
    // 循环体
    System.out.println("这是无限循环");
}


2. 使用 for 循环
for (;;) {
    // 循环体
    System.out.println("这是无限循环");
}

3. 使用 do-while 循环
do {
    // 循环体
    System.out.println("这是无限循环");
} while (true);

2.4.2 示例

题目:带有条件的无限循环

public class Person {
    public static void main(String[] args) {
        int count = 0;

        while (true) {
            System.out.println("循环次数: " + count);
            count++;

            // 假设在10次后退出循环
            if (count >= 10) {
                break; // 退出循环
            }

            // 休眠1秒钟
            try {
                Thread.sleep(1000); // 休眠1000毫秒(1秒)
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("循环结束。");
    }
}

结果:

注意:

  1. 容易引发死循环。
  2. 在合适的场景下,它是非常有用的,如服务器监听、实时数据处理、GUI事件监听、游戏主循环以及后台任务。
  3. 设计时,要确保有清晰的退出条件,以避免资源泄露和性能问题

2.5 嵌套循环

2.5.1 嵌套循环的结构

说明:嵌套循环是指在一个循环内部再包含一个或多个循环的结构。在Java中,嵌套循环可以用于处理多维数组、生成图形、执行复杂的算法等。是处理多维数据和执行重复任务等有效方法。

1.嵌套for循环的基本结构:
for (int i = 0; i < 外部条件; i++) {
    // 外层循环代码
    for (int j = 0; j < 内部条件; j++) {
        // 内层循环代码
    }
}

2.嵌套while循环的基本结构:

while (条件1) {
    // 外层循环的代码

    while (条件2) {
        // 内层循环的代码
    }

    // 外层循环的其他代码
}
3.嵌套do-while循环的基本结构:

do {
    // 外层循环的代码

    do {
        // 内层循环的代码
    } while (条件2);

    // 外层循环的其他代码
} while (条件1);

2.5.2 示例

题目:二维数组的遍历

public class Person {
    public static void main(String[] args) {
        int[][] array = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };

        for (int i = 0; i < array.length; i++) { // 遍历行
            for (int j = 0; j < array[i].length; j++) { // 遍历列
                System.out.print(array[i][j] + " "); // 打印元素
            }
            System.out.println(); // 换行
        }
    }
}

结果:

3.关键字break和continue

3.1 break

说明:break用于立即终止当前循环。它可以用于for、while和do-while循环中。当程序执行到break语句时,循环将被完全退出,控制权将转移到循环后面的第一条语句。

示例:打印5遍内容

public class Person{
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                break; // 当 i 等于 5 时,终止循环
            }
            System.out.println(i);
        }
        System.out.println("循环已终止");
    }
}

结果:i等于5时,break语句被触发,循环终止,因此只打印出0到4的数字。

3.2 continue

说明:continue用于跳过当前循环中的剩余语句,并立即开始下一次循环的迭代。也就是说,当程序执行到continue语句时,当前迭代将被跳过,控制权将转移到循环的开始部分。

示例:打印10以内的所有奇数

public class Person {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                continue; // 跳过偶数
            }
            System.out.println(i);
        }
    }
}

结果:当i为偶数时,continue语句被触发,跳过了System.out.println(i);语句,因此只打印出奇数。

3.3 综合使用

示例:跳过所有能被3整除的数字,并在num大于15时终止循环。

public class Person {
    public static void main(String[] args) {
        for (int num = 0; num < 20; num++) {
            if (num % 3 == 0) {
                continue; // 跳过能被3整除的数字
            }
            if (num > 15) {
                break; // 当 num 大于15时,终止循环
            }
            System.out.println(num);
        }
    }
}

结果:

注意:

  1. break和continue都是用于控制循环执行流的关键字。
  2. break用于完全退出循环,而continue则跳过当前迭代并继续下一次循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值