Вопрос по java, switch-statement – Коммутатор дает ошибку несовместимых типов

9

Я пытаюсь скомпилировать, и я получаю эту ошибку:

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

Почему я получаю эту ошибку? Как мне это исправить? Это'в упаковке, и я могуКажется, это понять. Вот's код:

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;
}

Ваш Ответ

5   ответов
4

переключатель принимаетСтрока из Java 7.до Java 7 толькоint совместимые типы (short, byte, int, char) могут быть переданы в качестве аргументов переключателя

Я действительно сожалею об этом. Я пытался удалить это понижение, и оно говорит мне, что яМне не разрешено менять свой голос. Это было случайное снижение, есть ли отмена? krico
может ли downvoter оставить комментарий? PermGenError
@krico Я только что отредактировал свое сообщение, теперь вы можете отменить свое пониженное голосование .. :) PermGenError
0

только int (и byte / char / short, но не long / double), если у вас нет Java7 +. Ваш лучший вариант сейчас состоит в том, чтобы перейти к операторам 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 и более поздних версиях вы можете использовать объект String в операторе switch 'с выражением

А как насчет переключателя (имя)? user1514362
@ user1514362 Что ты имеешь в виду? Я дал вам пример, который нене может использовать оператор switch, но выполняет то же самое. Isn»это то, что вы хотите? Вы должны удалить свой оператор switch, чтобы он работал Alex Coleman
Можете ли вы дать мне пример? user1514362
@ user1514362 см редактировать Alex Coleman
-1

char, short или int, но не String.

Если вы не используете Java 7 или новее - см. Другие ответы. Windle
Да, достаточно верно. Don Branson
2

просто добавьте следующий фрагмент кода в ypur pom.xml и решите вашу проблему:

 <build>
        <plugins>
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-compiler-plugin</artifactid>
                <configuration>
                    <source>1.8
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
Похоже, мавен застрял в средневековье. Я никогда не думал, что такая очевидная вещь, как стандартный java API, должна быть включена явно, добавив несколько строк в файл maven pom. Это работает, спасибо! Kirill Karmazin
10
switch(name)

switch Оператор со строкой поддерживается только в Java7.

Я думаю, что версия компилятора, который вы используете, меньше, чем Java7

Опции:

1) You need to either upgrade to Java7 
2) Change switch statement to `if/else`
3) Use `int` in switch instead of `String`
Вам нужно обновить Java до Java7 kosa
И если это по-прежнему не удается, это может быть ваша IDE. Для IntelliJ, перейдите кFile > Project Structure > Project > Project Language Level и установите на 7 и выше mugume david
Что мне нужно исправить, чтобы заставить это работать на этом тогда? user1514362

Похожие вопросы