由于未知原因,我在此方法中仅在两个案例块中出现了重复的案例标签错误。当我在每个单独的字母中分隔案例时,也会出现这种情况(在'O'字符上出现错误)。是否可以在不将字母改为小写的情况下修复它?
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';
}
}
}
答案 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 :(得分:0)
它们用作按位运算符 -
System.out.println("'J' | 'K' | 'L' " + ('J' | 'K' | 'L'));
System.out.println("'M' | 'N' | 'O' " + ('M' | 'N' | 'O'));
输出 -
&#39; J&#39; | &#39; K&#39; | &#39; L&#39; 79 &#39; M&#39; | &#39; N&#39; | &#39; O&#39; 79