Wyr*_*zeu 1 java label case duplicates
由于未知原因,我在此方法中仅在两个案例块中出现了重复的案例标签错误.当我在每个单独的字母中分隔案例时,也会出现这种情况(在'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';
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是你正在使用按位|来组合字符 - 这并不像我认为的那样提供多个案例.相反,它只是为不同的字符取Unicode值,并将它们与按位或运算相结合.
这将显示您收到重复案例错误的原因:
System.out.println('G' | 'H' | 'I');
System.out.println('J' | 'K' | 'L');
System.out.println('M' | 'N' | 'O');
Run Code Online (Sandbox Code Playgroud)
所有三条线都打印79.
你真的想要:
case 'A': case 'B': case 'C': buf[i]='2'; break;
case 'D': case 'E': case 'F': buf[i]='3'; break;
etc
Run Code Online (Sandbox Code Playgroud)
(我个人也会重新格式化,但这是另一回事.请注意这些break陈述!)
您可能还想考虑使用Map<Character, Character>switch语句而不是switch语句.
| 归档时间: |
|
| 查看次数: |
2633 次 |
| 最近记录: |