程序流程控制_分支结构的用法(#if-else语句 #switch-case语句)

  • 程序流程控制

注:循环结构看另一篇文章

  • 分支语句1_if-else

格式1. 

格式2.

 格式3.

使用说明

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

 Test

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

import java.util.Scanner;

public class TestDecision {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);//创建接收键盘录入对象——scanner
        System.out.println("请输入第一个整数");
        int num1 = s.nextInt();//接收键盘输入对象
        System.out.println("请输入第一个整数");
        int num2 = s.nextInt();
        System.out.println("请输入第一个整数");
        int num3 = s.nextInt();

        if (num1 > num2){
            if (num3 > num1) // if-else结构是可以相互嵌套的。
                System.out.println(num3 + "," + num1 + "," + num2);
            else if (num3 < num2){
                System.out.println(num1 + "," + num2 + "," + num3);
            }else{
                System.out.println(num1 + "," + num3 + "," + num2);
            }
        }

        else{
            if (num3 > num2)//如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。
                System.out.println(num3 + "," + num2+ "," + num1);
            else if (num3 < num1){
                System.out.println(num2 + "," + num1 + "," + num3);
            }else{
                System.out.println(num2 + "," + num3 + "," + num1);
            }
        }

    }
}

if-else的就近原则

int x = 4;
int y = 1;
if (x > 2)
    if (y > 2)
        System.out.println(x + y);
        //System.out.println("未加大括号的if,其后只能跟一条语句");
else //就近原则
    System.out.println("x is " + x);//x is 4
  • 分支语句2_switch-case

格式:

 说明

1. 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字(break关键字是可选的。)或此switch-case结构末尾结束为止。

//需求:从键盘分别输入年、月、日,判断这一天是当年的第几天
public class TestDecision {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入年份");
        int year = s.nextInt();
        System.out.println("请输入月份");
        int month = s.nextInt();
        System.out.println("请输入月份第几天");
        int day = s.nextInt(); //定义一个变量来保存总天数

        //方式一:冗余
		/*if(month == 1){
			sumDays = day;
		}else if(month == 2){
			sumDays = 31 + day;
		}else if(month == 3){
			sumDays = 31 + 28 + day;
		}else if(month == 4){
			sumDays = 31 + 28 + 31 + day;
		}
		//...
		else{
		    month == 12
			sumDays = ..... + day;
		}  */

        //方式二:冗余
		/*switch(month){
		case 1:
			sumDays = day;
			break;
		case 2:
			sumDays = 31 + day;
			break;
		case 3:
			sumDays = 31 + 28 + day;
			break;
		...
		case 12:
		    sumDays = 31 + 28 + ... + 31 + 30 + day;
		}  */

        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;
                //判断year是否是闰年
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {//可以被4整除,但不可被100整除或可以被400整除
                    sumDays += 29;
                } else {
                    sumDays += 28;
                }

            case 2:
                sumDays += 31;
            case 1:
                sumDays += day;
        }
        System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");
    }
}

2. switch结构中的表达式,只能是如下的6种数据类型之一:byte 、short、char、int、枚举类型(JDK5.0新增)switch表达式使用枚举类型示例、String类型(JDK7.0新增)

boolean play = true;
switch (play){//编译不通过
    case true:
        System.out.println("放假出去玩!");
        break;
    case false:
        System.out.println("放假加班!");
        break;
    default:
        System.out.println("输入有误");

3.  case 之后只能声明常量。不能声明范围。

int age = 10;
switch(age){
    case age > 18://编译不通过
        System.out.println("成年了");
        break;
    default:
        System.out.println("未成年");
}

4. default:相当于if-else结构中的else,default结构是可选的,而且位置是灵活的(一般放在程序的最后)。 

5. 如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。

int score = 60;
switch(score / 10){
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        System.out.println("不及格");
        break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
        System.out.println("及格");
        break;
}

//更优的解决方案:
switch(score / 60){
    case 0:
        System.out.println("不及格");
        break;
    case 1:
        System.out.println("及格");
        break;
}

switchif语句的对比

1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。

说明:本篇文章部分内容和图片引用尚硅谷官网内容,特此说明。@尚硅谷官网地址 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值