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 は堅牢ではないことがわかりました。オプション:

Enum の使用を検討してください。

また、すべての文字列をリストに入れ、indexOf を使用することを検討すると、インデックスをオンに切り替えることができます。

于 2012-09-22T06:14:59.603 に答える
0

私がかなり頻繁に使用しているトリックがありますが、それは多くの議論を引き起こす可能性があります.

switch()の式をに置き換えますname.hashCode()。次にcase、単一の文字があるそれぞれの場所で、二重引用符を単一引用符に置き換えます。他のすべての場所では、対応する文字列の hashCode() に等しい数値を配置する必要があります。

于 2012-09-22T05:38:20.400 に答える