switch和if-else的用法类似:
if(x == 3) {
}else if(x == 30) {
}else if(x == -6) {
}else {
}
等同于switch的:
switch(x) {
case 3:
break;
case 30:
break;
case -6:
break;
default:
}
如果switch的case中不包含break,则即使运行了某个case中的代码,仍会检测其他case并一直运行到最后。
switch parameter的数据类型:
switch(int, short, byte, char, string){}
switch example: AgeCalculator.java
import javax.swing.JOptionPane;
import java.util.Calendar;
public class AgeCalculator {
private static int daysSince_01_01_1900(int month, int date, int year) {
int days = (int)((year - 1900) * 365.25);
switch(month) {
case 12:
days += 30;
case 11:
days += 31;
case 10:
days += 30;
case 9:
days += 31;
case 8:
days += 31;
case 7:
days += 30;
case 6:
days += 31;
case 5:
days += 30;
case 4:
days += 31;
case 3:
days += (year % 4 == 0)? 29 : 28;
case 2:
days += 31;
}
days += date;
return days;
}
public static void main(String[] args) {
String birthday = JOptionPane.showInputDialog("Enter your birthday (MM/DD/YYYY): ");
int birthMonth = Integer.parseInt(birthday.substring(0, 2));
int birthDay = Integer.parseInt(birthday.substring(3, 5));
int birthYear = Integer.parseInt(birthday.substring(6, 10));
Calendar calendar = Calendar.getInstance();
int todayMonth = calendar.get(Calendar.MONTH) + 1; // returns 0 for January!
int todayDay = calendar.get(Calendar.DAY_OF_MONTH);
int todayYear = calendar.get(Calendar.YEAR);
int todayDays = daysSince_01_01_1900(todayMonth, todayDay, todayYear);
int birthdayDays = daysSince_01_01_1900(birthMonth, birthDay, birthYear);
int ageDays = (todayDays - birthdayDays);
System.out.println("You are " + ageDays + " days old.");
System.out.println("That is " + ageDays * 24 * 60 * 60 + " seconds!");
}
}
输入为:
02/27/1998
输出为:
You are 7244 days old.
That is 625881600 seconds!
That is 625881600 seconds!
switch中代码相同的case是可以归并的,类似于在if-else的Boolean中使用"||"。
example:
public class BetterSwitch {
public static void main(String[] args) {
String digitString = JOptionPane.showInputDialog("Enter a single digit.");
int digit = Integer.parseInt(digitString);
int mysteryValue = 0;
switch(digit) {
case 0:
case 4:
case 5:
case 9:
mysteryValue = 4;
break;
case 1:
case 2:
case 6:
mysteryValue = 3;
break;
case 3:
case 7:
case 8:
mysteryValue = 5;
break;
default:
throw new RuntimeException("Illegal Value: " + digit);
}
System.out.println("Mystery value is " + mysteryValue);
}
}
以上代码就等同于:
import javax.swing.JOptionPane;
public class PlainSwitch {
public static void main(String[] args) {
String digitString = JOptionPane.showInputDialog("Enter a single digit.");
int digit = Integer.parseInt(digitString);
int mysteryValue = 0;
switch(digit) {
case 0:
mysteryValue = 4;
break;
case 1:
mysteryValue = 3;
break;
case 2:
mysteryValue = 3;
break;
case 3:
mysteryValue = 5;
break;
case 4:
mysteryValue = 4;
break;
case 5:
mysteryValue = 4;
break;
case 6:
mysteryValue = 3;
break;
case 7:
mysteryValue = 5;
break;
case 8:
mysteryValue = 5;
break;
case 9:
mysteryValue = 4;
default:
throw new RuntimeException("Illegal value: " + digit);
}
System.out.println("Mystery value is " + mysteryValue);
}
}