- 論壇徽章:
- 0
|
一、switch語句的使用
而如果再和if-then-else語句,switch語句可以有多個(gè)可能的執(zhí)行路徑。開關(guān)與字節(jié),短,char,int和
原始數(shù)據(jù)類型。它還與枚舉類型(在枚舉類型的討論),string的類,以及一些特殊的類包一定的原始
類型:字符,字節(jié),短,和整數(shù)(在數(shù)字和字符串的討論)。
下面的代碼示例,switchdemo,聲明一個(gè)int的值代表一個(gè)名叫月。該代碼顯示每個(gè)月的名稱,根據(jù)月值
,使用switch語句。
public class SwitchDemo {
public static void main(String[] args) {
int month = 8;
String monthString;
switch (month) {
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
case 3: monthString = "March";
break;
case 4: monthString = "April";
break;
case 5: monthString = "May";
break;
case 6: monthString = "June";
break;
case 7: monthString = "July";
break;
case 8: monthString = "August";
break;
case 9: monthString = "September";
break;
case 10: monthString = "October";
break;
case 11: monthString = "November";
break;
case 12: monthString = "December";
break;
default: monthString = "Invalid month";
break;
}
System.out.println(monthString);
}
}
在這種情況下,八月打印到標(biāo)準(zhǔn)輸出。
switch語句體就是一個(gè)開關(guān)塊。在開關(guān)語句塊可以標(biāo)記與一個(gè)或多個(gè)案例或默認(rèn)標(biāo)簽。switch語句對(duì)其
表達(dá),然后執(zhí)行的所有語句,遵循匹配的case標(biāo)號(hào)。
你也可以顯示每個(gè)月的名稱與if-then-else語句:
nt month = 8;
if (month == 1) {
System.out.println("January");
} else if (month == 2) {
System.out.println("February");
}
... // 等等
決定是否使用if-then-else語句或語句是基于可讀性,語句的表達(dá)式的測(cè)試。一個(gè)if-then-else語句可
以測(cè)試基于值的范圍或條件表達(dá)式,而開關(guān)語句測(cè)試表達(dá)式僅基于一個(gè)整數(shù),枚舉值,或字符串對(duì)象。
另一個(gè)興趣點(diǎn)是break語句。每一個(gè)break語句終止封閉開關(guān)語句。控制流繼續(xù)下面的開關(guān)塊的第一個(gè)語
句。break語句是必要的因?yàn)闆]有他們,在開關(guān)塊語句失。核袌(bào)表匹配的case標(biāo)號(hào)后依次執(zhí)行,無論
后續(xù)case標(biāo)簽的表達(dá),直到遇到break語句是。程序switchdemofallthrough顯示報(bào)表中的一個(gè)開關(guān)塊落
空。該程序顯示對(duì)應(yīng)的整數(shù)月和月,按照年月:
public class SwitchDemoFallThrough {
public static void main(String[] args) {
java.util.ArrayList<String> futureMonths =
new java.util.ArrayList<String>();
int month = 8;
switch (month) {
case 1: futureMonths.add("January");
case 2: futureMonths.add("February");
case 3: futureMonths.add("March");
case 4: futureMonths.add("April");
case 5: futureMonths.add("May");
case 6: futureMonths.add("June");
case 7: futureMonths.add("July");
case 8: futureMonths.add("August");
case 9: futureMonths.add("September");
case 10: futureMonths.add("October");
case 11: futureMonths.add("November");
case 12: futureMonths.add("December");
break;
default: break;
}
if (futureMonths.isEmpty()) {
System.out.println("Invalid month number");
} else {
for (String monthName : futureMonths) {
System.out.println(monthName);
}
}
}
}
這是從代碼的輸出:
August
September
October
November
December
從技術(shù)上講,最后的突破是不需要因?yàn)榱髌俨紡膕witch語句。利用休息的建議,修改代碼更容易,更不
容易出錯(cuò)。默認(rèn)的部分處理所有的值都沒有一個(gè)明確的情況下部分處理。
下面的代碼示例,switchdemo2,顯示如何聲明可以有多個(gè)case標(biāo)簽。該代碼示例計(jì)算在一個(gè)特定的天數(shù)
:
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;
default:
System.out.println("Invalid month.");
break;
}
System.out.println("Number of Days = "
+ numDays);
}
}
這是從代碼的輸出:
Number of Days = 29
二、在switch語句中使用字符串
在Java SE 7和之后,你可以在switch語句中的表達(dá)式中使用一個(gè)字符串對(duì)象。下面的代碼示例,
stringswitchdemo,展示了基于字符串的值為月的月數(shù):
public class StringSwitchDemo {
public static int getMonthNumber(String month) {
int monthNumber = 0;
if (month == null) {
return monthNumber;
}
switch (month.toLowerCase()) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
case "april":
monthNumber = 4;
break;
case "may":
monthNumber = 5;
break;
case "june":
monthNumber = 6;
break;
case "july":
monthNumber = 7;
break;
case "august":
monthNumber = 8;
break;
case "september":
monthNumber = 9;
break;
case "october":
monthNumber = 10;
break;
case "november":
monthNumber = 11;
break;
case "december":
monthNumber = 12;
break;
default:
monthNumber = 0;
break;
}
return monthNumber;
}
public static void main(String[] args) {
String month = "August";
int returnedMonthNumber =
StringSwitchDemo.getMonthNumber(month);
if (returnedMonthNumber == 0) {
System.out.println("Invalid month");
} else {
System.out.println(returnedMonthNumber);
}
}
}
從這個(gè)代碼的輸出是 8.
switch表達(dá)式中的字符串與每個(gè)case標(biāo)簽相關(guān)的如string.equals方法被用來表達(dá)的比較。為了
stringswitchdemo例接受任何月姑,月轉(zhuǎn)換為小寫(與toLowerCase方法),以及所有與案件相關(guān)的字符
串小寫標(biāo)簽。
注:此示例檢查在switch語句的表達(dá)是無效的。確保在任何開關(guān)語句的表達(dá)式是無效的防止一個(gè)
NullPointerException異常被拋出。
本文轉(zhuǎn)載于toceansoft.com |
|