有人可以将此切换到if语句而不是切换?

时间:2012-09-22 05:24:43

标签: java

当我尝试在旧的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;
 }

3 个答案:

答案 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()。