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

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

Ваш Ответ

5   ответов
4

switch принимаетString from java 7. prior to java 7 толькоint compatible types (short,byte,int, char) могут быть переданы в качестве аргументов переключателя

Я действительно сожалею об этом. Я пытался удалить это понижение, и оно говорит мне, что мне не разрешено менять свой голос. Это было случайное снижение, есть ли отмена?
@krico Я только что отредактировал свое сообщение, теперь вы можете отменить свое пониженное голосование .. :)
может ли downvoter оставить комментарий ??
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
И если это по-прежнему не удается, это может быть ваша IDE. Для IntelliJ, перейдите кFile > Project Structure > Project > Project Language Level и установите на 7 и выше
Что мне нужно исправить, чтобы заставить это работать на этом тогда? user1514362
-1

В Java вы можете включить только byte, char, short или int, но не String.

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

Вы не можете переключить экземпляр String, только 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:

In Java SE 7 and later, you can use a String object in the switch statement's expression.

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

Если вы используете проект 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>
Похоже, мавен застрял в средневековье. Я никогда не думал, что такая очевидная вещь, как стандартный java API, должна быть включена явно, добавив несколько строк в файл maven pom. Это работает, спасибо!

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