2013-01-11 2 views
1

Я практиковал другой день, и я наткнулся на эту ошибку с помощью строки для переключателя:переключатели в Java

Cannot switch on a value of type String. Only int values or enum constants are permitted 

Я не знаю, как я бы это исправить, так что я пришел сюда за помощью. Я использую Eclipse. Вот источник, второй ПЕРЕМЕННЫЕ (заглавные буквы), где я получаю ошибку:

public class Switch { 
public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    System.out.println("Please enter a command: "); 
    String VARIABLE = input.nextLine(); 

    switch (VARIABLE) { 
    case "start": 
     System.out.println("Machine started!"); 
     break; 

    case "stop": 
     System.out.println("Machine stopped!"); 
     break; 

    default: 
     System.out.println("Invalid command"); 
    } 

} 
} 

Было бы здорово, если бы кто-то может помочь мне с этим. Я относительно новичок в этом, поэтому я не уверен, что это даже имеет смысл.

+7

Это означает именно то, что говорит; вы не можете включить String. Java 7 добавляет эту способность, и в документах/учебниках указано следующее: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html –

+0

Каков вывод 'java -version'? – squiguy

+4

Это означает, что теперь настало время перейти на Java 1.7 – exexzian

ответ

11
switch (VARIABLE) { 

switch с Strings поддерживаются с Java 7 и далее. Я предполагаю, что вы используете более низкую версию java, вам нужно либо обновить версию Java до 7 (или) удалить String из коммутатора, либо использовать поддерживаемые типы.

Адрес oracle tutorial on switch statement.

+0

Спасибо за все ваши ответы! У меня была установлена ​​Java 7, но она не была связана с рабочей областью. У меня была устаревшая версия Eclipse. Для тех, кто читает это в будущем, убедитесь, что у вас установлен Java 7, а предыдущие версии - это стирание Java. Затем включите эту версию для своего рабочего пространства. – Godz

3

В дополнение к ответу Намбари: Вы можете использовать конструкторы if-else со строками, конечно же, чтобы иметь логику переключения с строками.

2

Ваш код верный, но поддержка строк для конструкций с коммутатором была введена в java7 (jdk1.7), поэтому ваша ошибка означает, что у вас установлена ​​более старая версия Java, и вам необходимо ее обновить. Если вы не хотите обновить Java, то вам необходимо использовать мультипликатор, если-иначе конструкция:

[...] 
if(VARIABLE.equals("start")){ 
    System.out.println("Machine started!"); 
} else if(VARIABLE.equals("stop")){ 
    System.out.println("Machine stopped!"); 
} else { 
    System.out.println("Invalid command"); 
} 
[...] 
Смежные вопросы