2014-03-27 56 views
1

由於不明原因,我在這種方法中只有兩個案例塊中出現了重複的案例標籤錯誤。當我在每個單獨的字母中分隔個案(在'O'字符上飛濺錯誤)時,這也會出現。是否可以修復它而不將字母改爲小寫?Java - chars中的重複案例標籤

Szyferka(String szyfr){ 
    char []buf = szyfr.toCharArray(); 
    int len=szyfr.length(); 
    for(int i=0; i<len; i++){ 
     switch(buf[i]){ 
      case 'A' | 'B' | 'C': buf[i]='2'; 
      case 'D' | 'E' | 'F': buf[i]='3'; 
      case 'G' | 'H' | 'I': buf[i]='4'; 
      case 'J' | 'K' | 'L': buf[i]='5'; //duplicate case label 
      case 'M' | 'N' | 'O': buf[i]='6'; //duplicate case label 
      case 'P' | 'Q' | 'R' | 'S': buf[i]='7'; 
      case 'T' | 'U' | 'V': buf[i]='8'; 
      case 'W' | 'X' | 'Y' | 'Z': buf[i]='9'; 
      case '.': buf[i]='1'; 
      case ' ': buf[i]='0'; 
     } 
    } 
} 

回答

6

的問題是,你使用bitwise |字符組合 - 這是提供多種情況,因爲我認爲你希望它。相反,它只是將不同字符的Unicode值與一個按位或運算組合在一起。

這會告訴你爲什麼你得到重複的情況下錯誤:

System.out.println('G' | 'H' | 'I'); 
System.out.println('J' | 'K' | 'L'); 
System.out.println('M' | 'N' | 'O'); 

所有三行打印79

你真的想:

case 'A': case 'B': case 'C': buf[i]='2'; break; 
case 'D': case 'E': case 'F': buf[i]='3'; break; 
etc 

(我會親自重新格式化,但這是另一回事。請注意break聲明!)

您可能還想考慮一個Map<Character, Character>而不是switch語句。

+1

@dasblinkenlight:謝謝,將補充一點。 –

0

它們被用作位運算符 -

System.out.println("'J' | 'K' | 'L' " + ('J' | 'K' | 'L')); System.out.println("'M' | 'N' | 'O' " + ('M' | 'N' | 'O'));

輸出 -

'J' | 'K'| 'L'79 'M'| 'N'| 'O'79