Switch语句:无效的字符常量

时间:2014-09-19 02:42:51

标签: java switch-statement

我试图创建一个将月份作为整数的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;
    }

5 个答案:

答案 0 :(得分:4)

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

为什么不为int语句变量使用char代替switch ...

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

答案 1 :(得分:3)

在Java中``表示一个字符,而"" 表示一个字符串。 10不是Java中的字符,而是两个字符,因此您无法将其放在那里。

在Java 7中,您可以对字符串进行切换,这样您就必须将所有``更改为""和month这样的字符串:

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

或者完全放弃``并打开int:

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

答案 2 :(得分:2)

正如其他人所说'10'有2个字符。为什么不使用整数:

 int month;
    switch(month){
    case 1:

    break;
    .
    .
    .
    }

来自java 1.7 Strings语句中也允许使用switch,所以你也可以写:

String month = // i / p

switch(month){
case "1" :

break;
.
.
.
.
.
}

答案 3 :(得分:2)

9

之后你有2个字符
e.g. 10, 11, 12

因此,不能将其视为单个字符。这就是你收到错误的原因。

如果您使用的是Java 1.7或更高版本,则可以使用string而不是char。但我认为最好的方法是将月变量转换为int并使用int case

//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;
}

答案 4 :(得分:1)

如果您将月份作为整数,则删除单引号,它将起作用 否则将月份作为字符串,它将起作用。