分支控制结构

一 单分支 if

语法:

if(条件表达式){
	执行代码块;(可以有多条语句.)
}

说明:当条件表达式为 ture 时,就会执行{}的代码。如果为false,就不执行特别说明;如果 {} 中只有一条语句,则可以不用写 {},但是建议写上 {}

代码演示

public static void main (String[] args) {
        // 编写一个程序,可以输入人的年龄,如果输入的年龄大于 35,则输出:
        // "你的年龄大于35,请不要投递简历/手动狗头"

        // 思路分析:
        // 1. 使用 Scanner 类,接收用户输入的年龄
        // 2. 把 Scanner 类接收到的年龄,保存到变量 age
        // 3. 判断 age 是否大于 35,如果大于 35,则输出提示信息
        
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的年龄:");
        int age = scanner.nextInt();
        if(age > 35) {
            System.out.println("你的年龄大于35,请不要投递简历/手动狗头");
        }

        System.out.println("程序结束");
    }

二 双分支 if-else

语法:

if(条件表达式){
	执行代码块1;
} else {
	执行代码块2;
}

说明:当条件表达式成立,即执行代码块1,否则执行代码块2.如果执行代码块只有一条语句,则 {} 可以省略,否则,不能省略

代码演示

public static void main (String[] args) {
        // 编写一个程序,可以输入人的年龄,
        // 如果输入的年龄大于 35,则输出:"你的年龄超过35,请不要投递简历/手动狗头"
        // 如果输入的年龄小于 35,则输出:"你的年龄不超35,可以投递简历/手动狗头"

        // 思路分析:
        // 1. 使用 Scanner 类,接收用户输入的年龄
        // 2. 把 Scanner 类接收到的年龄,保存到变量 age
        // 3. 判断 age 是否大于等于 35,如果大于等于 35,则输出提示信息
        // 4. 如果 age 不大于 35,则输出提示信息

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的年龄:");
        int age = scanner.nextInt();
        if(age >= 35) {
            System.out.println("你的年龄超过35,请不要投递简历/手动狗头");
        } else { // 双分支
            System.out.println("你的年龄不超35,可以投递简历/^_^");
        }

        System.out.println("程序结束");
    }

练习题

public static void main (String[] args) {
        // 声明2个double变量,判断第一个数大于10.0,且第二个数小于20.0,打印两数之和
        double n1 = 10.5;
        double n2 = 25.5;
        if (n1 > 10.0 && n2 < 20.0) {
            System.out.println("n1 + n2 = " + (n1 + n2));
        }

        // 声明2个int变量,判断两个数之和是否能被3整除,且能被5整除
        int n3 = 10;
        int n4 = 20;
        int sum = n3 + n4;
        if (sum % 3 == 0 && sum % 5 ==0) {
            System.out.println("n3 + n4 是 3 和 5 的公倍数");
        } else {
            System.out.println("n3 + n4 不是 3 和 5 的公倍数");
        }

        // 判断一个年份是否是闰年, 闰年的条件是符合下面二者之一:
        // 1. 年份能被4整除,但不能被100整除
        // 2. 能被400整除
        int years = 2021;
        if ( years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {
            System.out.println(years + "年是闰年");
        } else {
            System.out.println(years + "年不是闰年");
        }
}

三 多分支

语法:

if(条件表达式1){
	执行代码块1;
} else if(条件表达式2){
	执行代码块2;
} 
……
else {
	执行代码块n;
}

特别说明:
(1)多分支 可以没有 else,如果所有的条件表达式都不成立,则一个执行入口都没有
(2)如果有 else,如果所有的条件表达式都不成立,则默认执行else代码块

代码演示

public static void main (String[] args) {
        // 编写一个程序,输入 保国 同志的芝麻信用分:
        // 如果:
        // 1. 信用分在 1000 分以上,输出:信用极好
        // 2. 信用分在 (750,999] 分时,输出:信用优秀
        // 3. 信用分在 (600,749] 分时,输出:信用一般
        // 4. 信用分在 (400,599] 分时,输出:信用较差
        // 4. 其它情况,输出:信用不及格

        // 思路分析:
        // 1. 导入 Scanner 类
        // 2. 使用 Scanner 类,接收用户输入的信用分
        // 3. 把 Scanner 类接收到的信用分,保存到变量 score
        // 4. 使用 if-else if-else 分支结构,判断 score 的值
        // 5. 根据 score 的值,输出对应的提示信息

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入保国同志的芝麻信用分:");
        int score = scanner.nextInt();
        if (score >= 1 && score <= 1200 ) {
            if (score >= 1000) {
                System.out.println("信用极好");
            } else if (score > 750 && score <= 999) {
                System.out.println("信用优秀");
            } else if (score > 600 && score <= 749) {
                System.out.println("信用一般");
            } else if (score > 400 && score <= 599) {
                System.out.println("信用较差");
            } else {
                System.out.println("信用不及格");
            }
        } else {
            System.out.println("输入的信用分范围错误,请重新输入");
        }
        scanner.close();
        System.out.println("程序结束");
}

练习题

public static void main (String[] args) {
        boolean flag = true;
        if (flag == false) {  
            System.out.println("a");
        } else if (flag) {
            System.out.println("b");
        } else if (!flag) {
            System.out.println("c");
        } else {
            System.out.println("d");
        }
}

输出结果:b

// 如果条件1改成 if(flag = false) 能编译通过吗?如果可以通缩输出结果是什么?
// 可以通过,结果是 c

四 嵌套分支

一个分支结构中又完整的嵌套了另一个完整的分支结构, 里面的分支的结构称为内层分支外面的分支结构称为外
层分支。 建议不超过3层

语法:

if() {
	if(){
		// if-else
	} else {
		// if-else
	}
}

代码演示

public static void main (String[] args) {
        // 参加歌手比赛,如果初赛成绩大于8.0进入决赛,否则提示淘汰。
        // 并且根据性别提示进入男子组或女子组。
        // 输入成绩和性别,进行判断和输出信息。

        // 提示: double score; char gender
        // 接收字符: char gender = scanner.next().charAt(0)

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩:");
        double score = scanner.nextDouble();

        if ( score >= 0.0 && score <= 10.0) {
            if (score > 8.0) {
                System.out.println("进入决赛");
                System.out.println("请输入性别:");
                char gender = scanner.next().charAt(0);

                if (gender == '男') {
                    System.out.println("进入男子组");
                } else if (gender == '女') {
                    System.out.println("进入女子组");
                } else {
                    System.out.println("性别输入错误,请重新输入");
                }
            } else {
                System.out.println("淘汰");
            }
        } else {
            System.out.println("分数输入范围错误,请重新输入");
        }
        scanner.close();
        System.out.println("程序结束");
}

练习题

public static void main (String[] args) {
        // 出票系统:根据输入的淡旺季的月份和年龄,打印票价
        /**
         * 4-10月是旺季,
         *      票价:成人(18-60):60元
         *      儿童(0-18):半价
         *      老人(60以上):1/3
         * 1-3月是淡季:
         *    票价:成人(18-60):40元
         *    其他:20元
         */

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份:");
        int month = scanner.nextInt();
        System.out.println("请输入年龄:");
        int age = scanner.nextInt();

        if (month >= 1 && month <= 12) {
            if (month >= 4 && month <= 10) {
                if (age >= 18 && age <= 60) {
                    System.out.println("成人票价:60元");
                } else if (age < 18) {
                    System.out.println("儿童票价:半价30元");
                } else {
                    System.out.println("老人票价:20元");
                }
            } else {
                if (age >= 18 && age <= 60) {
                    System.out.println("成人票价:40元");
                } else {
                    System.out.println("票价:20元");
                }
            }
        } else {
            System.out.println("月份输入错误,请重新输入");
        }
}

五 switch 分支结构

语法:

switch(表达式) {
	case 常量1 :
		语句块1;
		break;
	case 常量2 :
		语句块2;
		break;
	...
	case 常量n :
		语句块n;
		break;
	default:
		default语句块;
		break;
}

代码演示

public static void main (String[] args) {
        // 输入字符,判断星期几

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符(a-f):");

        char ch = scanner.next().charAt(0);
        switch (ch ){
            case 'a':
                System.out.println("星期一");
                break;
            case 'b':
                System.out.println("星期二");
                break;
            case 'c':
                System.out.println("星期三");
                break;
            case 'd':
                System.out.println("星期四");
                break;
            case 'e':
                System.out.println("星期五");
                break;
            case 'f':
                System.out.println("星期六");
                break;
            case 'g':
                System.out.println("星期日");
                break;
            default:
                System.out.println("你输入的是其他字符");
        }
        System.out.println("退出switch,继续执行程序");
}
switch 细节
  • 表达式数据类型,应和case 后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是 int
  • switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举],String)
  • case子句中的值必须是常量,而不能是变量
  • default子句是可选的,当没有匹配的case时,执行default
  • break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;

练习题


public static void main (String[] args) {
        // 1. 从键盘输入一个字符,判断它是字母、转为大写字母,只转换 a b c d e 其它字符输出 other
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个字符:");
        char ch = scanner.next().charAt(0);

        switch (ch) {
            case 'a':
                System.out.println("A");
                break;
            case 'b':
                System.out.println("B");
                break;
            case 'c':
                System.out.println("C");
                break;
            case 'd':
                System.out.println("D");
                break;
            case 'e':
                System.out.println("E");
                break;
            default:
                System.out.println("other");
        }

        // 2. 对学生成绩大于60分的,输出 合格;低于60分的,输出 不合格
        // 成绩不能大于100,小于0   否则输出 输入的成绩不合法
        // 思路分析
        // 1. 使用switch语句,根据学生成绩的十位数进行判断
        // 2. 编程思路:
        // 2.1. 如果成绩在[60,100],(int)(成绩/60) = 1
        // 2.2. 如果成绩在[0,60),(int)(成绩/60) = 0
        // 2.3. 如果成绩不在[0,100],输出 输入的成绩不合法
        System.out.print("请输入学生成绩:");
        double score = scanner.nextDouble();
        if (score >= 0 && score <= 100) {
            switch ((int) (score / 60)) {
                case 1:
                    System.out.println("合格");
                    break;
                case 0:
                    System.out.println("不合格");
                    break;
                default:
                    System.out.println("输入的成绩不合法");
            }
        } else {
            System.out.println("输入的成绩不合法");
        }

        // 3.从键盘输入一个月份,输出该月份所属的季节
        // 3,4,5 春季  6,7,8 夏季  9,10,11 秋季  12,1,2 冬季
        System.out.println("请输入一个月份:");
        int month = scanner.nextInt();
        if ( month >= 1 && month <= 12) {
            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;
            }
        } else {
            System.out.println("输入的月份不合法");
            return;
        }

        scanner.close();
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值