对一个开关case语句使用两个值
在我的代码中,程序根据用户input的文本执行某些操作。 我的代码如下所示:
switch (name) { case text1: { //blah break; } case text2: { //blah break; } case text3: { //blah break; } case text4: { //blah break; }
但是,案例text1
和text4
的代码是相同的。 因此,我想知道是否可以实现类似的东西
case text1||text4: { //blah break; }
我知道||
运算符将不会在case语句中工作,但有什么类似的我可以使用。
您可以使用两个CASE
语句如下。
case text1: case text4:{ //blah break; }
看这个例子:代码示例计算特定月份的天数:
class SwitchDemo { 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
通电路:
另一个有趣的地方是break语句。 每个break语句终止封闭的switch语句。 控制stream程继续执行开关块之后的第一条语句。 break语句是必需的,因为如果没有它们,switch语句块中的语句会
fall through
:匹配case标签之后的所有语句都会按顺序执行,而不pipe后续case标签的expression式如何,直到遇到break语句为止。
示例代码:
public class SwitchFallThrough { 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"); 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
在开关语句中使用string
在Java SE 7和更高版本中,可以在switch语句的expression式中使用String对象。 以下代码示例根据名为month的string的值显示月份的编号:
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); } } }
这个代码的输出是8。
从Java文档
你可以这样做:
case text1: case text4: { //blah break; }
case
值只是可以共享相同入口点的无代码“goto”点:
case text1: case text4: //blah break;
请注意,大括号是多余的。
做就是了
case text1: case text4: do stuff; break;
别人的答案是好的。
然而,另一种方法是从您的case语句的内容中提取方法,然后从每个案例调用适当的方法。
在下面的例子中,'case1'和case'text4'的情况都是一样的:
switch (name) { case text1: { method1(); break; } case text2: { method2(); break; } case text3: { method3(); break; } case text4: { method1(); break; }
我个人发现这种写作风格的陈述风格更易于维护,可读性更强,特别是当您调用的方法具有很好的描述性名称时。
括号是不必要的。 做就是了
case text1: case text4: doSomethingHere(); break; case text2: doSomethingElse() break;
如果有人好奇,这就是所谓的案例贯彻。 做到这一点的能力是break;
的原因break;
有必要结束案件陈述。 有关更多信息,请参阅wikipedia文章http://en.wikipedia.org/wiki/Switch_statement 。
通过做法是我觉得最好的一个。
case text1: case text4: { //Yada yada break; }
案例值只是可以共享相同入口点的无代码“goto”点:
案例text1:
案例text4:{
//做一点事
打破;
}
请注意,大括号是多余的。
最简单的方法就是使用同样的方法。
switch (name) { case text1: { method1(); break; } case text2: { method2(); break; } case text3: { method3(); break; } case text4: { method1(); break; } } private void method1() { //do the logic which is same }