2.2、Switch分支

目标:掌握switch分支的结构语法,以及能够运用Switch结构实现分支结构解决问题

概念

Switch分支:一种接收颗粒条件的分支结构

  • Switch分支:条件是具体值,而不是范围条件
  • Switch代码块是写在一起的,使用case分开,而不是{}
  • Switch代码块允许执行多个(如果有必要)
  • Switch结构
switch(条件变量){
    case 值:
        满足条件1要执行的代码块
        代码执行控制:break
    ...
    default :
        不满足所有条件执行的代码块
        代码执行控制:break
}

步骤

1、确定目标条件:条件必须是颗粒度的,通常是一个变量(没有比较符号)

2、确定可能出现的结果:一个条件对应一个case指令

3、确定每个case指令下要执行的代码

4、确定每个case指令是否需要结束

  • 结束使用break
  • 不结束,代码会继续执行下一个case的代码块(代码块共享)

5、确定是否需要不满足条件的代码块:default

  • 没有:结束
  • 有:确定default的代码块

示例

1、明天天气出太阳,出去走走;天气刮风,去看电影;天气阴天,在家看书;否则睡觉

#假设外部接收条件:条件变量为$weather,值为sun、wind、cloud和其他
switch($weather){
        #匹配第一个值:直接取$weather的值即可
    case 'sun':
        echo '出去走走';
        break;            #结束:表示switch完结
    case 'wind':
        echo '去看电影';
        break;
    case 'cloud':
        echo '在家看书';
        break;
    default:            #其他值
        echo '睡觉';
        break;            #最后一个可以没有break
}

/*
 执行逻辑
 1、switch根据条件进入
 2、匹配$weather的值:找到合适的case
  2.1:找到:执行
      2.1.1:有break:结束
      2.1.2:没有break:继续执行后面的case指令
  2.2:没有找到,进入default
*/

2、一周7天,1-5天上班,6和7休息(共享代码块)

#确定条件:条件是1-7,每次都是一个具体的值(颗粒度)
$day = 2;

#判定条件
switch($day){
    #确定条件及其要执行的代码块
    case 1:        #$day的值为1,等价于 $day == 1
        echo '上班';
        #确定是否要结束 
        
        break;
    case 2:        #发现2-5其实是同一件事情,所以可以省去重复执行的代码块
    case 3:
    case 4:
    case 5:
        echo '上班';
        break;
    case 6:
    case 7:
        echo '休息';
        break;
    #确定是否需要不满足条件结果
    default:
        echo '没有这样的日子';
        break;
}

/*
 执行逻辑
 1、switch根据条件进入
 2、匹配是否有合适的case,没有进入default,有进入:2进入case 2
 3、进入case 2后开始执行代码块:没有
 4、看看case 2后没有发现结束语句:break,继续向下执行,进入case 3
 5、同理直到进入case 5:执行代码块,发现break,结束switch
*/

总结

1、switch是一种用来实现颗粒条件的分支结构

  • 只适合固定值:case 具体值(内部使用 == 比较)
  • 不适合进行大小比较:不能case 条件 > 10之类

2、switch的结构如下

switch(条件变量){
    case 值1:
        代码块;
        break;
    case 值2:
        代码块;
        break;
    default:
        代码块;
        break;
}

3、break如果不写,那么可以实现多个case共享一个代码块

4、default可以没有

5、凡是switch能做的分支,if都能做;但是if能做的switch不一定能做

Last modification:February 21st, 2020 at 05:41 pm