9

コンパイルしようとすると、次のエラーが発生します。

enigma/Rotor.java:30: incompatible types found : java.lang.String required: int     switch(name){
1 error

このエラーが発生するのはなぜですか? どうすれば修正できますか?パッケージに入っているのですが、よくわかりません。コードは次のとおりです。

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

6 に答える 6

11
switch(name)

switchString を含むステートメントは、Java7 以降でのみサポートされます。

あなたが使用しているコンパイラのバージョンはJava7よりも古いと思います

オプション:

  1. Java7にアップグレードする必要があります
  2. switch ステートメントを次のように変更しますif/else
  3. 代わりintにスイッチで使用String
于 2012-09-20T21:43:30.210 に答える
6

Maven プロジェクトを使用している場合は、次のコードを ypur pom.xml に追加するだけで問題を解決できます。

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
于 2018-07-25T15:57:08.350 に答える
4

switchはJava 7 から文字列を受け入れます。java 7 より前では、int 互換型 (short、byte、int、char)のみをスイッチ引数として渡すことができます。

于 2012-09-20T21:45:55.573 に答える
1

Maven を使用している場合は、pom のビルドを次のように変更します。それ以外の場合は、JDK バージョンを 1.8+ に変更します。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>
于 2021-07-01T09:22:02.417 に答える
0

Java7+ を使用していない限り、String インスタンスを切り替えることはできません。最善の選択肢は、次のように if else ステートメントに変更することです。

if("B".equals(string)) {
    //handle string being "B"
} else if("C".equals(string)) {
    //handle string being "C"
} else ...

切り替えの詳細については、Oracleチュートリアルを参照してください。彼らは Java7 String 機能について言及しています:

Java SE 7 以降では、switch ステートメントの式で String オブジェクトを使用できます。

于 2012-09-20T21:44:10.417 に答える
-1

Java では、文字列ではなく、byte、char、short、または int に対してのみ切り替えを行うことができます。

于 2012-09-20T21:44:56.573 に答える