当我尝试在旧的Java机器上编译它时,我收到此错误。我需要切换到if语句?有人可以阐明这个切换到if声明吗?我收到此错误
不兼容的类型
发现:java.lang.String
required:int
这是代码
switch(name) {
String label;
Rotor(){;}
Rotor(String name){
switch(name){
case "B":
conversion_chart = B;
break;
case "C":
conversion_chart = C;
break;
case "I":
conversion_chart=I;
notch = NOTCH[0];
break;
case "II":
conversion_chart=II;
notch = NOTCH[1];
break;
case "III":
conversion_chart=III;
notch = NOTCH[2];
break;
case "IV":
conversion_chart=IV;
notch = NOTCH[3];
break;
case "V":
conversion_chart=V;
notch = NOTCH[4];
break;
case "VI":
conversion_chart=VI;
notch = NOTCH[5];
break;
case "VII":
notch = NOTCH[6];
conversion_chart=VII;
break;
case "VIII":
notch = NOTCH[7];
conversion_chart=VIII;
break;
}
label = name;
position = 0;
}
答案 0 :(得分:2)
除非您使用Java 7,否则不能在switch语句中使用String。
按照这种模式重写它:
Rotor(String name){
if(name != null ) {
if(name.equals("B")) {
convert_chart = B;
}
else if(name.equals("C")) {
convert_chart = C;
}
// other cases...
}
label = name;
position = 0;
}
答案 1 :(得分:1)
我发现Strings上的这些巨大的长if / elseif在实践中是非强大的。选项:
考虑使用枚举。
另外,考虑将所有字符串放入List并使用indexOf,然后可以打开索引。
答案 2 :(得分:0)
我经常使用一种技巧,但这可能引起很多争论。
将switch()
中的表达式替换为name.hashCode()
。然后在你有一个字母的每个case
中 - 用单引号替换双引号。在所有其他地方,您必须将数值等于相应字符串的hashCode()。