2_4、Java基本语法流程控制之分支结构

一、分支结构:if-else结构

        情况一:

                        if (条件表达式){

                                执行语句;

                        }

        int n =10;
		int m = 12;
		if(m>n){
			System.out.println("m比n大");
		}

        情况二:二选一

                        if(条件表达式){

                                执行语句1;

                        }else{

                                执行语句2;

                                }

        int age = 121;
		if(age<18){
			System.out.println("多看动画片!");
		}else{
			System.out.println("多看电影!");
		}

         情况三:多选一

                        if(条件表达式1){

                                执行语句1;

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

                                执行语句2;

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

                                执行语句3;

                        }

                        ...

                        else{

                                执行语句n;

                        }

        if(age<0){
			System.out.println("数据非法");
		}else if(age <18){
			System.out.println("你未成年");
		}else if(age <40){
			System.out.println("正直壮年");
		}else if(age<120){
			System.out.println("老年");
		}else{
			System.out.println("修仙");
		}

说明:

        1. if(条件表达式)中的条件表达式必须是布尔表达式、布尔变量。else 结构是可选的。
        2. 针对于条件表达式:
                   > 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
                   > 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
                   > 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。
        3. if-else结构是可以相互嵌套的。
        4. 如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。

经典例题:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。

        Scanner scan =  new Scanner(System.in);
  		System.out.print("请输入第一个整数:");
		int num1 = scan.nextInt();
		System.out.print("请输入第二个整数:");
		int num2 = scan.nextInt();
		System.out.print("请输入第三个整数:");
		int num3 = scan.nextInt();
		if(num1>num2){
			if(num2>num3){
				System.out.println(num3);
				System.out.println(num2);
				System.out.println(num1);
			}else{
				System.out.println(num2);
				System.out.println(num3);
				System.out.println(num1);
			}
		}else if(num2>num1){
			if(num1>num3){
				System.out.println(num3);
				System.out.println(num1);
				System.out.println(num2);
			}else {
				if(num2>num3){
					System.out.println(num1);
					System.out.println(num3);
					System.out.println(num2);
				}else{
					System.out.println(num1);
					System.out.println(num2);
					System.out.println(num3);
				}
			}
			
		}

运行结果:

二、分支结构:switch-case选择结构

1.结构:      

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

2.说明:

        ① 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。
        ② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
        ③ switch结构中的表达式,只能是如下的6种数据类型之一:
                   byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
        ④ case 之后只能声明常量。不能声明范围。
        ⑤ break关键字是可选的。
        ⑥ default:相当于if-else结构中的else。 default结构是可选的,而且位置是灵活的。

特别说明:如果switch-case中case的几个执行语句都相同,那么前几个case的执行语句可以省略。

经典例题:

        1.使用 switch 把小写类型的char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。

        Scanner scan = new Scanner(System.in);
		
		System.out.print("请输入需要转化的字母:");
		char alphabet = scan.next().charAt(0);
		
		switch(alphabet){
		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');
		default:
			System.out.println("other");
			//break;
		}

运行结果:

         2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

        int score = 61;
		switch(score/60){
		case 0:
			System.out.println("不及格!");
			break;
		case 1:
			System.out.println("及格");
			break;
		default:
			System.out.println("成绩错误");
			//break;
		}

运行结果:

        3.从键盘上输入2019年的“month”和“day”,要求通过程序 输出输入的日期为2019年的第几天。

        Scanner scan = new Scanner(System.in);
		
		System.out.print("请输入月份:");
		int month = scan.nextInt();
		System.out.print("请输入日期:");
		int day = scan.nextInt();
		
		int sumDays = 0;
		switch(month){
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9:
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				sumDays += 28;
			case 2:
				sumDays += 31;
			case 1:
				sumDays += day;
		}
		System.out.println(month + "月" + day + "日,是2019年的第" + sumDays + "天" );

 运行结果:

例题改进:从键盘分别输入年、月、日,判断这一天是当年的第几天 。

        Scanner scan = new Scanner(System.in);
		
		System.out.print("请输入年份:");
		int year = scan.nextInt();
		System.out.print("请输入月份:");
		int month = scan.nextInt();
		System.out.print("请输入日期:");
		int day = scan.nextInt();
		
		int sumDays = 0;
		if((year % 4 ==0 && year % 100 != 0) || year % 400 == 0){
			switch(month){
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9:
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				sumDays += 29;
			case 2:
				sumDays += 31;
			case 1:
				sumDays += day;
			}
		}
		else{
			switch(month){
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9:
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				sumDays += 28;
			case 2:
				sumDays += 31;
			case 1:
				sumDays += day;
			}
		}
		
		System.out.println(year + "年" + month + "月" + day + "日,是" + year + "年的第" + sumDays + "天" );

运行结果:

分支结构的选择:

          ①如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。 
        ②其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,使用switch-case的,都可以改写为if-else。反之不成立。 

三元运算符与分支结构选择:
    ①如果既可以使用三元运算符又可以使用if-else,那么优先使用三元运算符,因为三元运算符效率高。但是三元运算符一次只能有两个选择结构if-else结构域可以多选一

    ②如果既可以用switch-case又可以用if-else结构,那么优先使用switch-case,因为switch-case效率高。但是switch-case结构中表达式的只能使用六种数据类型,且不能是范围取值,所以如果范围教大优先使用if-else。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值