生活中总是面临多种选择,程序也一样。
上周,我们借助收快递这一生活场景,为大家介绍了if语句和if/else语句的区别,帮助大家理清逻辑思路。
今天,我们依旧借助生活中的场景为大家讲解if/else if/else if的两种不同的应用场景:多种选择与多选一的选择的区别。
我们以《Arduino轻松学:状态指示灯》的课堂作业为例,首先我们来看一下实现效果:
按下按键,灯亮;再按一下,切换至呼吸灯效果;再按一下,关灯。
如果逻辑用错了,就会出现如下情况:
灯的呼吸效果会卡住。
(其实灯的另外两种效果也会卡住,但那两种状态下,灯的亮灭状态本来就是不变的,很难发现正确程序与错误程序的差异)
产生上述效果差异的原因,是因为混淆了if/else if/else if的两种不同的应用场景:多种选择与多选一的选择的区别。
多种选择
每当接近午餐时间,大家就会热烈讨论中午吃什么,打开外卖APP,找到了三种可以快速送达的美食 {生煎、寿司、盖浇饭}:
同事周说:我不喜欢吃生煎。
同事陈说:寿司好贵啊,我们吃别的吧。
同事奥说:昨天刚吃过盖浇饭,我们换别的吧。
最后大家一合计,一起去楼下吃了兰州拉面。
虽然提出了多种选择,但并不意味着非要从中选一个。
《Arduino轻松学--状态指示灯》作业错误程序
即便有多种选择,如果按键没按下,程序不会执行任何操作。
原本亮着会继续亮着,原本暗着会继续暗着,呼吸效果也只会执行一次,执行完后灯的亮度就不再变化。
多选一的选择
多选一,则意味着不论选择多与少,你一定要选择其中的一个。
比如上班的通勤方式。你可以开车、可以坐地铁、可以乘公交、也可以骑单车或者走路,只要你上班,那必须要在上述交通工具中选择一个。
比如下面这组程序,给定3种选择,程序一定会执行其中的一个(下图红框内)
《Arduino轻松学--状态指示灯》作业答案一
状态变量被限制在0、1、2三个值之间变化,对应灯的“开--呼吸--关”三种状态。loop()函数执行完一遍,程序会自动匹配变量数值之后再次执行对应操作。如果灯的状态是呼吸效果,那呼吸效果也会重复执行,直到你按下按键,进行切换。
上图红框中的程序也可以用下图红框中的程序来替代,也就是用else来包含所有counter≠0和counter≠1的情况:
《Arduino轻松学--状态指示灯》作业答案二
那么,这两种选择的应用场景是怎么样的呢?
多种选择:
适合变量状态与外界交互(按键状态、光线强度、温度等)的检测,符合条件就执行,不符合就跳过;
多选一的选择:
用于程序中必须要选一个执行的并列的程序指令之间的选择执行控制。
程序设计时要么使用else保底,要么限制变量、状态只能在特定数值及状态间变化。
这两种不同的选择方式,你明白了吗?