0

当我尝试在旧的 java 机器上编译它时出现此错误。我需要切换到 if 语句?有人可以阐明这一点以切换到 if 语句吗?我收到这个错误

发现不兼容的类型
:需要 java.lang.String
: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;
 }
4

3 回答 3

2

除非不幸的是使用 Java 7,否则不能在 switch 语句中使用字符串。

只需按照以下模式重写它:

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;
 }
于 2012-09-22T05:35:06.707 回答
1

我发现这些巨大的长 if/elseif on Strings 在实践中并不稳健。选项:

考虑使用枚举。

此外,考虑将所有字符串放入一个列表并使用 indexOf,然后您可以打开索引。

于 2012-09-22T06:14:59.603 回答
0

我经常使用一个技巧,但这可能会引起很多争论。

switch()用替换表达式name.hashCode()。然后在每个case有一个字母的地方 - 用单引号替换双引号。在所有其他地方,您必须输入等于相应字符串的 hashCode() 的数值。

于 2012-09-22T05:38:20.400 回答