流程控制语句

流程控制语句

1 键盘录入

获取用户在控制台输入的内容,使用到了类型是引用数据类型

引用数据类型使用步骤:

  • 导包(java.lang包的不需要导入)
  • 创建变量 引用数据类型 变量名 = new 引用数据类型(参数);
  • 使用变量 变量名.方法名();

2 流程控制语句

2.1 分类

  • 顺序结构
  • 选择结构
  • 循环结构

2.2 顺序结构

是程序中最简单最基本的流程控制,没有特定的语法结构。按照代码的先后顺序,依次执行。

public static void main(String[] args) {
        System.out.println("一天晚上");
        System.out.println("两个和尚");
        System.out.println("三更半夜");
        System.out.println("四处流浪");
    }

2.3 选择结构

  • 选择结构也称之为叫分支结构
  • 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断。逻辑运算的结果有两个,所以会产生选择,按照不同的选择执行不同的代码。
  • java语言提供了两种选择结构的语句
    • if语句
    • switch语句

2.3.1 if语句

格式一:

if (布尔表达式){
	语句体;
}
  • 执行流程
    • 首先判断布尔表达式的结果是true还是false
    • 如果是true就执行语句体
    • 如果是false就不执行语句体

if 语句体中只有一行代码,大括号可以省略

流程图

image-20250620110720769

public static void main(String[] args) {
        System.out.println("晚上没事在大街上闲逛");
        System.out.println("请输入您的年龄");
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        if (age >= 18) 
            System.out.println("去网吧坐坐");
            System.out.println("开机");
            System.out.println("上号");
            System.out.println("骂人");
            System.out.println("下机");

        System.out.println("回家睡觉");
    }

格式二:

if (布尔表达式){
	语句体1;
}else {
	语句体2;
}
  • 执行流程

    • 首先判断布尔表达式的结果是true还是false
    • 如果是true就执行语句体1
    • 如果是false就执行语句体2
  • 流程图

image-20250620111524113

public static void main(String[] args) {
        // 输入一个数字,判断是奇数还是偶数
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        if (num % 2 == 0){
            System.out.println(num + "是偶数");
        }else {
            System.out.println(num + "是奇数");
        }
    }

格式三:

if (布尔表达式1){
	语句体1;
}else if (布尔表达式2){
	语句体2;
}else if (布尔表达式3){
	语句体3;
}...
else if (布尔表达式n){
	语句体n;
}else{
	语句体n+1;
}

执行流程:

  • 首先判断布尔表达式1的结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就继续判断布尔表达式2的结果是true还是false
  • 如果是true就执行语句体2
  • 如果是false就继续判断布尔表达式3......
  • 如果所有的布尔表达式的结果都是false,就执行语句体n+1

流程图

image-20250620113218007

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        if (age >=0 && age <= 1){
            System.out.println("婴儿");
        }else if (age > 1 && age <= 7){
            System.out.println("幼儿");
        }else if (age > 7 && age <= 12){
            System.out.println("儿童");
        }else if (age > 12 && age <= 18){
            System.out.println("少年");
        }else if (age > 18 && age <= 35){
            System.out.println("青年");
        }else if (age > 35 && age <= 50){
            System.out.println("中年");
        }else if (age > 50 && age <= 110){
            System.out.println("老年");
        }else {
            System.out.println("年龄有误");
        }
    }

课堂练习:

x和y的关系满足如下

x >= 3   y = 2x + 1
-1 < x < 3   y = 2x
x <= -1    y = 2x - 1

让用户输入x的值,计算出y的值

public static void main(String[] args) {
        // 获取用户输入的x的值
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        int y;
        if (x >= 3){
            y = 2 * x + 1;
        }else if (x > -1 && x < 3){
            y = 2 * x;
        }else {
            y = 2 * x - 1;
        }
        System.out.println("y的值是" + y);
    }

根据用户输入的月份,显示正确的季节

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int month = scanner.nextInt();
        if (month >= 3 && month < 6)
            System.out.println("春天适合露营");
        else if (month >= 6 && month < 9)
            System.out.println("夏天适合游泳");
        else if (month >= 9 && month <= 11)
            System.out.println("秋天适合登高");
        else if (month == 12 || month == 1 || month == 2){
            System.out.println("冬天适合睡觉");
        }else
            System.out.println("输入有误!");
        
    }

2.3.2 switch语句

格式:

switch(表达式){
    case 目标值1:
        语句体1;
        break;
    case 目标值2:
        语句体2;
        break;
    ...
    default:
        语句体n+1;
        break;
}
  • 格式解释:
    • switch表示这是switch语句
    • 表达式的取值类型:byte、short、int、char
    • JDK5之后可以放枚举
    • JDK7之后可以放String
    • case后面跟的是表达式进行匹配的值
    • 语句体就是一条或者多条语句
    • break表示中断,结束的意思。会立即结束switch语句
    • default表示上面都不匹配时执行的语句

流程图

image-20250620150521762

  • 注意点:
    • default的break如果在代码的最后,可以不写,但是不建议
    • switch中的语句,顺序不影响最终的结果
    • case具有穿透效果,如果没有break的影响,那么会一直执行下去
public static void main(String[] args) {
        int i = 11;
        switch (i){
            case 3:
                System.out.println("3月份适合玩");
                break;
            case 6:
                System.out.println("6月份适合考试");
                break;
            case 10:
                System.out.println("10月份适合放假");
                break;
            default:
                System.out.println("傻x吧你");
                break;
        }
    }

课堂练习:根据用户输入的月份,输出对应的季节

public static void main(String[] args) {
        // 获取用户输入的月份
        Scanner s = new Scanner(System.in);
        int month = s.nextInt();
        switch (month){
            case 3:
            case 4:
            case 5:
                System.out.println("浅草才能没马蹄");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏天去河里游泳");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋天去爬山");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬天打雪仗");
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }

JDK17特性:switch语句

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String cityName = scanner.next();
        String provinceName = switch (cityName){
            case "郑州","洛阳","开封" -> {
                System.out.println("河南是个好地方");
                yield "河南省";
            }
            case "武汉","襄阳","孝感" -> "湖北省";
            case "理塘","成都","乐山" -> "四川省";
            case "石家庄市","燕郊","廊坊" -> "河北省";
            default-> "妈妈省的";

        };
        System.out.println(provinceName);
    }

2.4 循环结构

2.4.1 概述

循环语句可以在满足循环条件的情况下,反复执行某一段代码。

2.4.2 循环语句的组成

  • 循环变量初始化(初始化表达式)

一条或者多条语句,完成一些初始化操作

  • 循环出口(布尔表达式)

这是一个boolean表达式,能够决定是否执行循环体

  • 循环体

就是要多次执行的代码

  • 循环增量(步进表达式)

在一次循环体结束后,下一次循环判断条件执行之前执行。通过控制循环条件中的变量,使得循环在合适的时候结束。

2.4.3 for循环

格式:

for (初始化表达式1;布尔表达式2;步进表达式4){
    循环体3;
}

执行流程: 1 2 3 4 2 3 4 2 3 4...2

流程图

image-20250620160821522

课堂练习:

  • 求1-100之间的偶数和
		// 代表和
        int sum = 0;
        for (int i = 1;i <= 100;i++){
            // 获取1-100之间所有的偶数
            if (i % 2 == 0){
                sum += i;
            }
        }
        System.out.println(sum);

// 代表和
        int sum = 0;
        for (int i = 2;i <= 100;i+=2){
            // 获取1-100之间所有的偶数
//            if (i % 2 == 0){
                sum += i;
//            }
        }
        System.out.println(sum);

  • 统计”水仙花数“有多少个
    • ”水仙花数“是一个三位数,其中个位的立方+十位的立方+百位的立方 等于其本身
    • 153 = 1 + 125 + 27 = 153
// 定义变量,统计个数
        int count = 0;
        for (int i = 100;i < 1000;i++){
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
                count++;
            }
        }
        System.out.println("水仙花数有" + count + "个");

2.4.4 while循环

基本格式:

while(布尔表达式){
	循环体;
}

扩展格式:

初始化表达式1;
while (布尔表达式2){
	循环体3;
	步进表达式4;
}

执行顺序:1 2 3 4 2 3 4 .... 2不满足为止

流程图:

image-20250620164833068

  • 打印100次HelloWorld
int i = 1;
        while (i <= 100){
            System.out.println("HelloWorld");
            i++;
        }
  • 求1-100之间的偶数和
		int i = 1;
        // 定义变量,表示和
        int sum = 0;
        while (i <= 100){
            // 判断i是否是偶数
            if (i % 2 == 0){
                sum += i;
            }
            i++;
        }
        System.out.println("和是" + sum);
  • 统计”水仙花数“有多少个
// 统计水仙花数有多少个
        int i = 100;
        // 定义变量,统计个数
        int count = 0;
        while (i < 1000){
            // 获取个位 十位  百位
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
                count++;
            }
            i++;
        }
        System.out.println("水仙花数有" + count + "个");

2.4.5 dowhile循环

格式:

初始化表达式1;
do{
	循环体3;
    步进表达式4;
}while(布尔表达式2);

执行顺序:1 3 4 2 3 4 2 3 4 2 3 4...2不满足为止

  • 流程图

image-20250620171332121

  • 打印100次HelloWorld
	int i = 1;
        do {
            System.out.println("HelloWorld");
            i++;
        }while (i <= 100);
  • 求1-100的偶数和
  • 统计水仙花数有多少个

2.5 三种循环的区别

  • dowhile循环至少会执行一次循环体
  • for循环和while循环只有在条件成立的时候才会执行循环体
  • for循环中的变量结束后就会回收,while和dowhile循环的变量不会被立即回收

2.6 跳转控制语句

  • 概述
    • 让循环在某一步的时候结束或者跳过某些数据不要这些数据。
    • java提供了break和continue来实现控制语句的中断和继续
    • break 中断
    • continue 继续

break:立即结束当前循环

	for (int i = 1;i <= 10;i++){
            if (i == 3){
                break;// 立即结束当前循环
            }
            System.out.println("记得吃早餐" + i);
        }

continue:跳过本次循环,继续下一次循环

for (int i = 1;i <= 10;i++){
            if (i == 3){
                continue;// 跳过本次循环,继续下一次循环
            }
            System.out.println("记得吃早餐" + i);
        }

循环是可以嵌套的

在多层循环中,break和continue只针对于离它们最近的循环

for (int i = 1;i <= 10;i++){
            System.out.println("i = " + i);
            for (int j = 1;j <= 10;j++){
                System.out.println("j = " + j);
                if (j == 2){
                    break;
                }
            }
        }

2.7 死循环

如果一个循环的条件永远是true,就称之为死循环,也称之为叫永真循环、无限循环

//        while (true){}
//        for(;true;){}
        for(;;){}

打印99乘法表
package cn.javasm.test;

public class TestDemo5 {
public static void main(String[] args) {
System.out.println("九九乘法表:");
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print(j + "x" + i + "=" + i * j + "\t");
}
System.out.println();
}
}
}

posted @ 2025-07-04 21:30  小胡coding  阅读(10)  评论(0)    收藏  举报