第十一节.Java中控制语句-选择语句
switch选择语句基础语法
switch语句一般用来处理简单的数据;复杂点的数据,比如涉及到大小判断、加减法运算等等一般使用if...else if...else语句。个人感觉再工作过程中使用的地方不多,只适合用来处理一些比较简单的数据和业务场景。
switch 语句和 if语句有些相似,某些情况下两种语句是可以互换的。不同的是switch是通过判断变量值来选择执行语句的。例如:通过一个数字来代表一星期的某一天。用1~7代表 周一到周日。我们来观察以下这个逻辑的伪代码:
// 伪代码 用来 分析语法
表示星期的数字
如果数字是1 ,输出星期一。
如果数字是2,输出星期二。
如果数字是3 ,输出星期三。
如果数字是4 ,输出星期四。
如果数字是5 ,输出星期五。
如果数字是6 ,输出星期六。
如果数字是7 ,输出星期日。
如果是其他数字,输出不再考虑的范围内。
对于以上的伪代码,大家可能向到可以用 if else if 的语法来完成实现。其实if elseif 和switch case语句在某些情况下是可以相互转换的。switch相对来说阅读起来更加方便。我们将伪代码进一步具体:
// 伪代码 用来分析语法
switch(用于表示星期的数字){
case 常量1:输出星期1;break;
case 常量2:输出星期1;break;
case 常量3:输出星期1;break;
case 常量4:输出星期1;break;
case 常量5:输出星期1;break;
case 常量6:输出星期1;break;
case 常量7:输出星期1;break;
default:不再考虑范围内;
}
通过以上的伪代码我们可以初步了解switch case的语法格式,具体如下:
// 伪代码 用来演示语法
switch(表达式){
case 目标值1:执行语句1;break;
case 目标值2:执行语句1;break;
… …
case 目标值n:执行语句n;break;
default:最后的执行语句;
}
switch执行顺序是这样的,通过switch后的表达式的值去匹配case后的目标值进行匹配。如果找到的匹配的值,会执行对应的case后的语句。没有找到任何匹配的值就执行 default后的最后的执行语句。这里需要注意的是switch后的表达式的值只能是 byte ,short ,int ,char类型,从jdk1.7开始可以是String字符串类型的值。如果传入其他的值会报错。break在一些情况下也是可以不写的。我们之后会详细讲解。先来看一下最基本的代码事例。
代码演示:
public class Demo1{
public static void main(String[] args){
// switch语句 演示
int week = 3; // 代表周几
switch(week){
case 1:System.out.println("星期一");break;
case 2:System.out.println("星期二");break;
case 3:System.out.println("星期三");break;
case 4:System.out.println("星期四");break;
case 5:System.out.println("星期五");break;
case 6:System.out.println("星期六");break;
case 7:System.out.println("星期日");break;
default : System.out.println("不再考虑范围内");
}
}
}
执行结果:
分析一波:分析以上代码和结果。由于变量week的值是3。整个switch语句中匹配结果满足case 3 输出星期三。我们可以更改一下week变量的值。然后反复编译和执行以下查看结果。
break关键字再switch语句中的作用
下边我们来主要看一看break在switch 的特殊用法。首先break并不是必须要写。break有中断,跳出的意思。我们可以中认为 case 一边是switch语句块的入口,当从入口进入执行程序,如果碰到了break就相当于到了出口跳出了整个语句块,即语句块执行完成。如果碰不到break就继续向下执行,直到碰到了break或者是switch的所有语句都执行完成。如下的代码:
代码演示:
public class Demo1{
public static void main(String[] args){
// switch语句 演示
int week = 1;
switch(week){
case 1:System.out.println("星期一");
case 2:System.out.println("星期二");
case 3:System.out.println("星期三");
case 4:System.out.println("星期四");break;
case 5:System.out.println("星期五");
case 6:System.out.println("星期六");
case 7:System.out.println("星期日");
default : System.out.println("不再考虑范围内");
}
}
}
执行结果:
分析一波:
week变量的值是1 ,程序从 case 1 开始进入执行 输出 “星期一”,之后并没有碰到break ,继续向下执行也就输出了“星期二”,“星期三”,“星期四”,输出“星期四”后碰到了break,switch语句块执行结束。然后我们将 week的值改变成5,再次执行获得以下结果。
分析一波:
分析执行结果:week变量5从case 5 开始进入 之后都没有break ,就把所有的输出都执行了,直到switch的最后一行。根据break的这个特性,如果多个case后的执行语句是一样的我们可以省略break,并且值书写一次执行语句即可。
根据这个使用特性,我们来书写一个新的程序。例如:我们来判断一周中的某一天是否是工作日。同样用1~7代表 周一到周日。当数字是1,2,3,4,5是就代表是工作日,6,7代表休息日。代码如下:
代码演示:
public class Demo1{
public static void main(String[] args){
// switch语句 演示
int week = 1;
switch(week){
case 1:
case 2:
case 3:
case 4:
case 5:System.out.println("工作日");break;
case 6:
case 7:System.out.println("休息日");break;
default : System.out.println("不再考虑范围内");
}
}
}
执行结果:
分析一波:week的值是1,从case 1 进入switch语句块,之后没有break一致向下执行直到输出 “工作日” 后,碰到break结束语句块执行。我们可以修改一些week变量的值,反复编译和执行几次观察结果。