Java - 字符中的重复案例标签

时间:2014-03-27 11:55:37

标签: java duplicates label case

由于未知原因,我在此方法中仅在两个案例块中出现了重复的案例标签错误。当我在每个单独的字母中分隔案例时,也会出现这种情况(在'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';
        }
    }
}

2 个答案:

答案 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