java switch语句简化了很多例

时间:2014-07-25 03:44:19

标签: java switch-statement

让我们说一个开关声明是,

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语句,它只允许我执行一个动作,所以我似乎无法走那条路。谢谢你的帮助!抱歉,我是新来的!

8 个答案:

答案 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提供的分割功能效果很好。