韦嘉版画:谁有switch最详细讲解越细越好
switch (varchar)
{
case (abc):
1..;
2..;
break;
case (cde):
1..;
2..;
break;
..
}
使用switch语句可以根据一个整型表达式有条件地执行语句。下面的例程SwitchDemo,声明了一个整型变量month,它的数值代表了月份。这个程序显示了月份的名字,主要是根据month的数值并且使用了switch语句。
public class SwitchDemo {
public static void main(String[] args) {
int month = 8;
switch (month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
case 3: System.out.println("March"); break;
case 4: System.out.println("April"); break;
case 5: System.out.println("May"); break;
case 6: System.out.println("June"); break;
case 7: System.out.println("July"); break;
case 8: System.out.println("August"); break;
case 9: System.out.println("September"); break;
case 10: System.out.println("October"); break;
case 11: System.out.println("November"); break;
case 12: System.out.println("December"); break;
}
}
}
这个switch语句计算它的表达式,在这个例子中是计算month的数值,然后计算适当的case 语句。这样,程序的输出为:August。
当然,你可以使用if语句来实现它:
int month = 8;
if (month == 1) {
System.out.println("January");
} else if (month == 2) {
System.out.println("February");
}
. . .
决定使用if语句还是switch语句的关键主要是根据可读型以及其它因素。if语句可以在更大范围或者条件来决定,而switch只有根据单个整型变量来做决定。同时,提供给case语句的数值必须是单一的。另外一点是,switch语句在每个case之后有一个break语句。每个break语句终止了swtich语句,并且控制流程继续switch块之后的第一个语句。break语句是必须的,因为没有它,case语句就会失效,也就是说,没有break语句,控制流程按顺序执行case语句。
下面的程序SwichDemo2将介绍为什么它是有效的;
public class SwitchDemo2 {
public static void main(String[] args) {
int month = 2;
int year = 2000;
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if ( ((year % 4 == 0) && !(year % 100 == 0))
|| (year % 400 == 0) )
numDays = 29;
else
numDays = 28;
break;
}
System.out.println("Number of Days = " + numDays);
}
}
这个程序的输出为:
Number of Days = 29
最后的break语句是不需要的,因为流程将跳出switch语句了。但是,我们推荐使用为最后一个case语句使用一个break以防你需要还增加更多的case语句。这就使得更容易修改代码以及减少错误。
一般地,你可以使用break来在分支语句中终止循环。最后你可以在switch最后使用缺省地语句来处理所有的上面没有处理的情况。
int month = 8;
. . .
switch (month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
case 3: System.out.println("March"); break;
case 4: System.out.println("April"); break;
case 5: System.out.println("May"); break;
case 6: System.out.println("June"); break;
case 7: System.out.println("July"); break;
case 8: System.out.println("August"); break;
case 9: System.out.println("September"); break;
case 10: System.out.println("October"); break;
case 11: System.out.println("November"); break;
case 12: System.out.println("December"); break;
default: System.out.println("Hey, that's not a valid month!"); break;