switch选择语句:
switch语句一般情况下与if语句的效果是等效的,但是switch语句的执行速率比嵌套的if语句要快,switch语句不分单选/双选/多选结构,它的结构取决于代码的逻辑。
表达式:
switch (条件表达式) { case 1: //条件表达式执行完毕后,switch判断该值是否为1,如果是1,则执行case1 以下的代码 代码块1; break; case 2: //case1执行完毕后,会继续判断该值是否为2,如果是,同理执行case2以下的代码 代码块2; break; default: //如果条件表达式执行完毕,且该值即不等于1也不等于2,则执行该代码块 代码块3; break; }
(注意:为了防止case穿透问题,一般在使用switch语句时都必须加上break(跳出),否则case下余的代码也会被编译执行,就毫无意义)
(注意:在JDK7之后的版本,switch语句还支持String类型,也就是说case后面的值不仅可以为数字,也可以为字符/字符串等。但是如果使用float与double会出现丢失精度的问题)
case穿透的理解:
当条件表达式计算完成后,程序开始执行,如果结果为1,则执行case1的代码块1。当代码块1执行完毕后,程序还会继续执行case2的代码块2,直至执行完所有case。
一般写程序时只有需要多选择结构时才会经常用到switch语句,如果是单/双选择结构,一般用if语句即可。
示例:
①使用switch语句实现一个简单的掷筛子小程序:
package exercise; /** * @author 刘小将 * switch语句:多选择结构 * 一个简单的掷色子小程序 */ public class TestSwitch { public static void main(String[] args) { double b = Math.random(); int e = 1+(int)(b*6); switch (e) { //switch()中默认是int型,或者自动转为int的类型(byte,short,char),也可以是枚举。JDK7版本后还支持字符串 case 6: System.out.println("恭喜您,您中了一等奖!"); break; //注意:如果此处不加break,则会发生case穿透,第一个case后面的代码将会被全部执行编译,所以必须加上。 case 5: System.out.println("恭喜您,您中了二等奖!"); break; case 4: System.out.println("恭喜您,您中了三等奖!"); break; default: System.out.println("很遗憾,您未中奖!"); break; } } }
②使用switch语句实现判断26个拉丁字母的音素:
package exercise; /** * @author 刘小将 * switch语句:多选择结构 * 判断26个拉丁字母的因素 */ public class TestSwitch { public static void main(String[] args) { char a = 'a'; int rand = (int)(26*Math.random()); char a2 = (char)(a+rand); //强制转型为char型 System.out.println(a2+":"); switch(a2) { case 'a': System.out.println("元音"); break; case 'e': System.out.println("元音"); break; case 'i': System.out.println("元音"); break; case 'o': System.out.println("元音"); break; case 'u': System.out.println("元音"); break; case 'w': System.out.println("半元音"); break; case 'y': System.out.println("半元音"); break; default: System.out.println("辅音"); break; } } }