让我们说一个开关声明是,
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;
是否可以将其缩短为
switch (month) {
cases 1-3: monthString = "January";
break;
case 4-5: monthString = "April";
break;
那么多个案例编号在一个案例中?因为我有100个案例,所以我这样做。 30导致一个答案,20个导致另一个答案,5个导致另一个答案......所以如果我可以使用多个案例,我应该减少很多代码。我还应该提到在每种情况下我都想做一些事情,如果我使用一系列if else语句,它只允许我执行一个动作,所以我似乎无法走那条路。谢谢你的帮助!抱歉,我是新来的!
答案 0 :(得分:4)
是否可以将其缩短为
Java Tutorial The switch Statement
中有更好的解释是的,你可以做到。
一些要点:
break
声明。 break
语句。 default
案例。示例代码:
int month = 1;
String monthString = null;
switch (month) {
case 1:
case 2:
case 3:
monthString = "January";
break;
case 4:
case 5:
monthString = "April";
break;
...
default:
...
}
答案 1 :(得分:1)
您可以考虑使用数组。
static String[] MONTHS = ",January,January,January,April,April".split(",");
monthString = MONTHS[month];
答案 2 :(得分:1)
我这样做,因为我有100个案例。 30导致一个答案,20个导致另一个答案,5个导致另一个答案
基于这个原因,为什么不比较int的大小而不是使用大量的直通案例。
无论你做了100个案例,仍然需要编写很多繁琐的代码,但是我无法想象任何一个人通过案件做了30个案件或者通过案件做了20个案件。由于您的比较int
不是String
,您可以使用if语句,如下所示:
if (month > 0 && month <= 30) {
monthString = "January";
}
else if (month > 30 && month <= 50) {
monthString = "February";
}
else if (month > 50 && month <= 55) {
monthString = "March";
}
// 55 cases have been matched
与之相比:
switch (month) {
case 1:
case 2:
case 3:
...
case 28:
case 29:
case 30:
monthString = "January";
break;
}
答案 3 :(得分:0)
如果我理解你的问题,那么是的。但它不是
switch (month) {
cases 1-3: monthString = "January";
break;
case 4-5: monthString = "April";
break;
}
这将是
switch (month) {
cases 1: case 2: case 3: monthString = "January";
break;
case 4: case 5: monthString = "April";
break;
}
案例陈述没有break
。另外,如果您的号码可能超出任何明确的情况,您可能需要default:
else
{/ 1}}。
答案 4 :(得分:0)
是的,这是可能的
switch (month) {
case 1:
case 2:
case 3: monthString = "January";
break;
case 4:
case 5:
monthString = "April";
答案 5 :(得分:0)
只需使用if-else。这种情况会更容易。
答案 6 :(得分:0)
您可以使用hashmap:
HashMap mySet = new HashMap()
然后用适当的集填充它:
(new Integer(1),“January”)
(new Integer(2),“January”)
(new Integer(3),“January”)
(new Integer(4),“April”)
(new Integer(5),“April”)
然后您的代码如下:
monthString = null;
mySet.containsKey(new Integer(month)) && monthString = mySet.getValue(new Integer(month))
这样你就可以利用短路和
"monthString = mySet.getValue(new Integer(month))"
仅在该密钥位于集合中时才执行。您还可以创建一个填充HashMap的函数,从而使维护变得容易。
您可以在这里阅读有关java中短路的更多信息: Java logical operator short-circuiting
答案 7 :(得分:0)
switch (month) {
case 1:
case 2:
case 3:
monthString = "January";
break;
case 4:
case 5:
monthString = "April";
break;
}
您可以使用此功能,并且@Peter提供的分割功能效果很好。