2013-04-14 2 views
0

Если я хочу, чтобы пользователь вводил значение в String из вывода меню на экране. Как я могу использовать этот ввод для оператора switch? он сохраняет, что он может использоваться только для int. Например, если пользователь вводит a, я хочу, чтобы он переключился на оператор case и выполнил действия. Извините, если это сбивает с толку.Заявление о выводе и строки

public static void sortData(short days[], String name[]) { 
    String choice; 
    Scanner kd = new Scanner(System.in); 

    System.out.println("a. Sort by Name\nb. Sort by Day"); 
    choice = kd.next();      // ???????? 

    switch (choice) { 
    case 1: {        // ????????? 
+0

Разве вы не можете просто получить первый символ строки и использования, что вместо строки ? Насколько я знаю, вы можете использовать символы для переключателя. – 11684

+0

@ 11684 Я пробовал использовать char, он компилировался бы без каких-либо ошибок, но когда я ввел ввод, он ничего не отображал. поэтому я изменил его на String. – user2278109

+0

Вы используете Java 7? Вы можете использовать String в случаях! – NINCOMPOOP

ответ

0

Насколько я знаю, это нормально:

public static void sortData(short days[], String name[]) { 
    char choice; 
    Scanner kd = new Scanner(System.in); 

    System.out.println("a. Sort by Name\nb. Sort by Day"); 
    choice = kd.next().toCharArray()[0]; 

    switch (choice) { 
    case 'a': 
     // do something 
     break; 
    case 'b'; 
     // do something else 
     break; 
    } 
} 

Не тестировался

+0

Я получил его от вашего предложения. нашел мою ошибку. спасибо за ваш вход @ 11684 – user2278109

2

Вы можете определить список строк для принятых вариантов и использовать indexOf найти введенный вход. После этого вы можете использовать индекс в своем switch.

Как это

List<String> options = Arrays.asList("name", "day", "color", "smell"); 
switch (options.indexOf(choice)) { 
case 0: // name 
    ... 
case 1: // day 
    ... 
... // etc 
default: // none of them 
} 

Однако, используя номера не очень читаемым.

Другая идея: определить перечисление и использовать valueOf(choice). В этом случае вы должны поймать IllegalArgumentException для несовпадающих входов.

enum Options { 
    name, day, color, smell 
} 

, а затем

try { 
    switch (Options.valueOf(choice)) { 
    case name: ... 
    case day: ... 
    // etc 
    } 
} catch (IllegalArgumentException ex) { 
    // none of them 
} 

или, наконец, вы переключитесь на Java 7 ;-)

+0

Мы пока не учили indexOf. Спасибо, в любом случае!! – user2278109

+0

Отличный ответ, намного лучше, чем у меня. Трюк со списком замечательный! – 11684

Смежные вопросы