2014-09-19 41 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

如果您每月爲整數,然後取出單引號,也將努力 別人做一個月的字符串時,它會奏效。