2014-09-19 125 views
0

我正在尝试创建一个switch语句,将月份作为整数,并基于该整数,我想输出月份名称。由于某些我不知道的原因,case '10'给了我一个无效的字符常量错误信息。有谁知道为什么会发生这种情况,我该如何解决这个问题?谢谢你,代码如下:开关语句:无效的字符常量

switch (month) { 
    case "1": System.out.println("January"); 
    break; 
    case "2": System.out.println("February"); 
    break; 
    case "3": System.out.println("March"); 
    break; 
    case "4": System.out.println("April"); 
    break; 
    case "5": System.out.println("May"); 
    break; 
    case "6": System.out.println("June"); 
    break; 
    case "7": System.out.println("July"); 
    break; 
    case "8": System.out.println("August"); 
    break; 
    case "9": System.out.println("September"); 
    break; 
    case "10": System.out.println("October"); 
    break; 
    case "11": System.out.println("November"); 
    break; 
    case "12": System.out.println("December"); 
    break; 
    } 

更多的答案后:

switch (month) { 
    case '1': System.out.println("January"); 
    break; 
    case '2': System.out.println("February"); 
    break; 
    case '3': System.out.println("March"); 
    break; 
    case '4': System.out.println("April"); 
    break; 
    case '5': System.out.println("May"); 
    break; 
    case '6': System.out.println("June"); 
    break; 
    case '7': System.out.println("July"); 
    break; 
    case '8': System.out.println("August"); 
    break; 
    case '9': System.out.println("September"); 
    break; 
    case '10': System.out.println("October"); 
    break; 
    case '11': System.out.println("November"); 
    break; 
    case '12': System.out.println("December"); 
    break; 
    } 

答案后

switch (month) { 
    case 1: System.out.println("January"); 
    break; 
    case 2: System.out.println("February"); 
    break; 
    case 3: System.out.println("March"); 
    break; 
    case 4: System.out.println("April"); 
    break; 
    case 5: System.out.println("May"); 
    break; 
    case 6: System.out.println("June"); 
    break; 
    case 7: System.out.println("July"); 
    break; 
    case 8: System.out.println("August"); 
    break; 
    case 9: System.out.println("September"); 
    break; 
    case 10: System.out.println("October"); 
    break; 
    case 11: System.out.println("November"); 
    break; 
    case 12: System.out.println("December"); 
    break; 
    } 
+0

'10'不是一个字符。这显然是两个字符。在执行'switch' /'case'之前,将字符转换为'int'。使用字符串的 – 2014-09-19 02:46:29

+1

在你的情况下是完全不必要的。所有你需要的是12个整数,所以只需使用整数:) – nem035 2014-09-19 02:48:42

+0

我决定让月份成为一个字符串并使用双引号“”。感谢大家!!!! – pbars23 2014-09-19 02:50:25

回答

4

'10'有两个字符,即'1''0'

你为什么不只是使用int,而不是charswitch声明变量...

int month = // ... however you get your month 
switch(month) { 
    case 1: // ... 
    case 2: // ... 
    case 3: // ... 
    // ... 
} 
3

在Java ``表示一个字符,而“”表示一个字符串。 10不是Java中的字符,而是两个字符,因此您不能将它放在那里。

在Java 7中,可以对字符串做开关,所以你不得不改变所有的``为“”和month像这样的字符串:

switch(month) { 
    case "1": // stuff 
    /* rest */ 
} 

或掉落``干脆打开INT:

switch(month) { 
    case 1: // stuff 
    /* rest */ 
} 
2

至于说别人 '10' 有2个字符。你为什么不使用整数代替:

int month; 
    switch(month){ 
    case 1: 

    break; 
    . 
    . 
    . 
    } 

从Java 1.7 Strings也允许在switch语句,所以你也可以这样写:

字符串月= // I/P

switch(month){ 
case "1" : 

break; 
. 
. 
. 
. 
. 
} 
2

您正在处理2个字符之后9

e.g. 10, 11, 12 

所以不能认为是一个字符。这就是你遇到错误的原因。

如果您使用的是Java 1.7或更高版本,则可以使用字符串而不是char。但我认为最好的办法是一个月变量转换为int和有诚信的情况下

//first cast month to a int 
switch (month) { 
    case 1: System.out.println("January"); 
     break; 
    case 2: System.out.println("February"); 
     break; 
    ...... 
    case 10: System.out.println("October"); 
     break; 
    case 11: System.out.println("November"); 
     break; 
    case 12: System.out.println("December"); 
     break; 
} 
1

如果您每月为整数,然后取出单引号,也将努力 别人做一个月的字符串时,它会奏效。