大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: switch 条件式

switch是Java提供的另一个条件判断陈述式,它只能比较数值或字节,不过别以为这样它就比if 来得没用,使用适当的话,它可比if判断式来得有效率;switch的语法架构如下:
switch(变量名称或运算式) {
    case 符合数字或字节:
        陈述句一;
        break;
    case 符合数字或字节:
        陈述句二;
        break;
    default:
        陈述三;
}

首先看看switch的括号,当中置放您想要取出数值的变量,取出数值之后,程序会开始与case中所设定的数字或字节作比对,如果符合就执行以下的陈述句,直到遇到break后离开switch区块,如果没有符合的数值或字节,则会执行default后的陈述句, default不一定需要,您可以省去这个部份。

来看看上一个范例的成绩等级比对如何使用switch来改写:

  •  ConditionSwitch.java
import java.util.Scanner;

public class ConditionSwitch {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("请输入分数: ");
int score = scanner.nextInt();
int level = (int) score/10;

switch(level) {
case 10:
case 9:
System.out.println("得A");
break;
case 8:
System.out.println("得B");
break;
case 7:
System.out.println("得C");
break;
case 6:
System.out.println("得D");
break;
default:
System.out.println("得E(不及格)");
}
}
}

在这个程序中,您使用除法并取得运算后的商数,如果大于90的话,除以10的商数一定是9或10(100分时),在case 10中没有任何的陈述,也没有使用break,所以会继续往下执行,直到遇到break离开switch为止,所以学生成绩100分的话,也会显示A的成 绩等级;如果比对的条件不在10到6这些值的话,会执行default下的陈述,这表示商数小于6,所以学生的成绩等级就显示为E了。

注意在case后的等号是冒号而不是分号,这是个很常键错的符号;如果您比对的是字节,则记得加上单引号(' '),例如:
case 'A':

这个程序与使用if来判断成绩等级的程序有何不同?如果纯綷比对数字或字节的话,建议使用switch,因为它只会在一开始的 switch括号中取出变量值一次,然后将这个值与下面所设定的case比对,但如果您使用if的话,每次遇到条件式时,都要取出变量值,效率的差异就在 这,例如:
if(a == 1)
    // ....
else if(a == 2)
    // ....
else if(a == 3)
    // ....

这个程序片段中在最差的状况下,也就是a = 3时,共需三次比对,而每次比对都必须取出变量a的值一次,如果换成switch的话:
switch(a) {
    case 1:
        // ..
        break;
    case 2:
        // ..
        break;
    case 3:
        // ..
        break;
}

在这个程序片段中,我们只在一开头switch的括号中取出变量a的值,然后逐一比对下面的case,效率的差别就在于这边。

当然并不是使用if就不好,遇到复合条件时,switch就帮不上忙了,您无法在switch中组合复杂的条件陈述,这时就得使用if了,简单的说, if 与switch两者可以搭配着灵活使用。