2014-12-08 63 views
0

我正在嘗試使用開關。它適用於所有情況,但與其他情況完全沒有區別的情況除外。開關盒不起作用。 Java

它測試第一個數組(int)除以13的剩餘部分,並根據給第二個(Char)指定特定值。

public static char[] FindValue(int[] OCards) { 
    char[] OValue = new char[5]; 
    int n; 
    for (int i = 0; i < 5; i++) { 
     n = OCards[i] % 13; 
     switch (n) { 
      case 0: 
       OValue[i] = 'A'; 
       break; 
      case 1: 
       OValue[i] = '2'; 
       break; 
      case 2: 
       OValue[i] = '3'; 
       break; 
      case 3: 
       OValue[i] = '4'; 
       break; 
      case 4: 
       OValue[i] = '5'; 
       break; 
      case 5: 
       OValue[i] = '6'; 
       break; 
      case 6: 
       OValue[i] = '7'; 
       break; 
      case 7: 
       OValue[i] = '8'; 
       break; 
      case 8: 
       OValue[i] = '9'; 
       break; 
      case 9: 
       OValue[i] = '10'; //Error here 'unclosed character literal' 
       break; 
      case 10: 
       OValue[i] = 'V'; 
       break; 
      case 11: 
       OValue[i] = 'D'; 
       break; 
      case 12: 
       OValue[i] = 'R'; 
       break; 


     } 
    } 
    return OValue; 
} 
+0

字符文字只能包含正好1個字符。 '10'是兩個字符。 – 5gon12eder 2014-12-08 00:20:16

+0

字符文字可以多於一個字符嗎? – 2014-12-08 00:20:56

+0

'10'是一個單個字符? – 2014-12-08 00:21:06

回答

3

正如其他人所指出的,問題是'10'不是字符

我們可以解決這個問題,並在同一時間保存你的手指很多彎曲的:

n = OCards[i] % 13; 
OValue[i] = "A23456789TVDR".charAt(n); 

這一條線替換整個switch聲明。

雖然我不確定是否使用了正確的符號。在英語中,它將是一個T。但在法語中,您明顯不能使用D作爲夫人dix

+1

羅馬十大的X怎麼樣? – 2014-12-08 01:20:20

+0

謝謝,這有助於很多。 你是對的,我會用T,如果它不夠好,我會在輸出卡時將T改爲10。 – 2014-12-09 16:38:05

2

你的錯誤是因爲你試圖用兩個字符做一個字符,而你只能用一個字符做一個字符。

你會想要改變你的數組來存儲整數,或者如果你需要用'T'或't'來存儲char的話,通常會這樣做。

1

Ovaluechar s的數組; '10'不是單個字符。

1

如何

case 9: 
      OValue[i] = 'T'; //use T char to stand for 10 
      break