在 Java SE 7 版之前,switch 只能接受數字型別的 case 判斷,可是我們常常會需要做字串的判斷,只好用一堆的 if-else 來處理,現在 Java SE 7 裡 switch 終於支援字串了!
舉個例子,例如你的程式需要讓使用者輸入一種水果的名字,然後顯示出來它是什麼顏色,蘋果是紅色,草莓也是紅色,香蕉是黃色,芭樂是綠色,而葡萄是紫色。傳統的程式碼會像這樣子
package idv.jacky.ironman4.day6;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Day6Example1 {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String fruit = "";
String color = "";
while (true) {
System.out.print("請輸入一種水果(蘋果, 草莓, 香蕉, 芭樂, 葡萄) > ");
try {
fruit = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
if (fruit.equals("蘋果"))
color = "紅色";
else if (fruit.equals("草莓"))
color = "紅色";
else if (fruit.equals("香蕉"))
color = "黃色";
else if (fruit.equals("芭樂"))
color = "綠色";
else if (fruit.equals("葡萄"))
color = "紫色";
else
continue;
if (!fruit.equals("") && !color.equals(""))
System.out.printf("%s 的顏色是 %s%n", fruit, color);
fruit = "";
color = "";
}
}
}
我們使用 BufferedReader 來從命令列上讀取使用者所輸入的字串(第10行是宣告,第17行是讀取),我們有個無限的迴圈(第14到40行),來讓使用者不斷地可以輸入不同的字,然後程式的第22到第31就是一堆的 if-else ,用來判斷輸入的字串是哪種水果,如果都不在我們預設的範圍內,就直接要使用者重新輸入(第33行)。最後,第36行就是把水果的顏色印出來。執行結果如下:
而在 Java SE 7裡,你可以把原來的 if-else 改成用 switch 的法
package idv.jacky.ironman4.day6;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Day6Example2 {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String fruit = "";
String color = "";
while (true) {
System.out.print("請輸入一種水果(蘋果, 草莓, 香蕉, 芭樂, 葡萄) > ");
try {
fruit = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
switch (fruit) {
case "蘋果":
case "草莓":
color = "紅色";
break;
case "香蕉":
color = "黃色";
break;
case "芭樂":
color = "綠色";
break;
case "葡萄":
color = "紫色";
break;
default:
continue;
}
if (!fruit.equals("") && !color.equals(""))
System.out.printf("%s 的顏色是 %s%n", fruit, color);
fruit = "";
color = "";
}
}
}
執行的結果當然一樣,不過程式碼是不是更簡潔清楚了呢?!