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