案例描述
某游乐园的门票价格如表 3-3 所示。
表 3-3 某游乐园的票价方案
年龄大于等于 10 岁 年龄小于 10 岁
平日 300 140
周末 500 210
编写程序,让用户输入年龄和星期几,弹出对话框显示门票价格。星期几用阿拉伯数字 0、1、2、3、4、5、
6 表示,其中 0 表示周日。
案例分析
本案例又是非常经典的双层 if 结构体嵌套的使用场景。当出现“大条件”套“小条件”的时候,需要使用
嵌套的 if 语句结构。本例又非常灵活,我们可以自由决定年龄和星期几谁是大条件,谁是小条件,所以我们提
出两种算法。
算法 1:星期作为大条件,年龄是小条件。即先判断用户输入的星期,然后判断年龄
算法 2:年龄作为大条件,星期是小条件。即先判断用户输入的年龄,然后判断星期
两种算法的效率是相同的,可以自由选择。
案例代码
算法 1 和算法 2 大同小异,仅仅是 if 语句的层级顺序不同而已。
算法 1 的程序代码如下:
//用户输入年龄
var age = Number(prompt("请输入年龄"));
//用户输入星期几
var weekday = Number(prompt("请输入星期几,0 表示星期日"));
//先判断星期几,然后判断年龄
if(weekday >= 1 && weekday <= 5){
if(age >= 10){
alert("300 元");
}else{
alert("140 元");
}
}else{
if(age >= 10){
alert("500 元");
}else{
alert("210 元");
}
}
算法 2 的程序代码如下:
//用户输入年龄
var age = Number(prompt("请输入年龄"));
//用户输入星期几
var weekday = Number(prompt("请输入星期几,0 表示星期日"));
//先判断星期几,然后判断年龄
if(age >= 10){
if(weekday >= 1 && weekday <= 5){
alert("300 元");
}else{
alert("500 元");
}
}else{
if(weekday >= 1 && weekday <= 5){
alert("140 元");
}else{
alert("210 元");
}
}
不管我们采用哪种算法思路,最终的执行结果相同的。
switch 语句
基本使用
除了 if 语句结构之外,JavaScript 还提供了另外一种选择语句:switch 语句。switch 的英文意思是开
关,顾名思义,它能独立设置每条分支语句的“开关状态”。
例如:要求用户输入一个 0~6 的数字,显示这一天对应的中文星期几。即用户输入 0,显示“星期天”;输
入 1,显示“星期 1”,依此类推。
我们完全可以用已经学习过的 if 语句结构来实现程序,代码如下:
var weekDay = Number(prompt("请输入星期数字,0~6"));
if(weekDay == 0){
alert("星期天");
}else if(weekDay == 1){
alert("星期一");
}else if(weekDay == 2){
alert("星期二");
}else if(weekDay == 3){
alert("星期三");
}else if(weekDay == 4){
alert("星期四");
}else if(weekDay == 5){
alert("星期五");
}else if(weekDay == 6){
alert("星期六");
}
这段程序是正确的,但语句总是看起来“不优雅”。的确,程序中出现了非常多的 else if(weekDay == 某
值)这样的写法,让人透不过气。
switch 语句可以简化程序,代码如下:
//用户输入 0~6 的星期数
var weekDay = Number(prompt("请输入星期数字,0~6"));
//显示中文
switch(weekDay){
case 0 :
alert("星期日");
break;
case 1 :
alert("星期一");
break;
case 2 :
alert("星期二");
break;
case 3 :
alert("星期三");
break;
case 4 :
alert("星期四");
break;
case 5 :
alert("星期五");
break;
case 6 :
alert("星期六");
break;
default :
alert("请输入正确的星期");
}
switch()的圆括号中是一个值(而不是一个表达式),本例中是一个变量 weekDay,即用户输入的数字。
程序依次用 7 个 case 的值与 weekDay 进行比对,看哪条 case 的值和 weekDay 相等,如果相等则执行这个 case
分支的语句。
break 表示跳出 switch 语句块。注意,switch 语句并不像 if 语句那样当执行了某一个分支之后会自动跳
出 if 语句体,程序员必须主动调用 break 来跳出 switch 语句体。
default 表示默认的输出,即当没有任何 case 与 weekDay 相等的时候执行的语句。本例中如果没有任何
case 和用户输入的数字匹配,则表示用户输入的数字不正确,所以 default 中写了语句 alert("请输入正确的
星期")。