2013-04-14 3 views
0

사용자가 화면의 메뉴 출력에서 ​​String 값을 입력하게하면. switch 문에 해당 입력을 어떻게 사용할 수 있습니까? int로만 사용할 수 있습니다. 예를 들어, 사용자가 a를 입력하면 case 문으로 전환하여 작업을 수행하려고합니다. 혼란 스럽다면 죄송합니다.Switch 문과 문자열

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를 사용해 보았지만 에러없이 컴파일 할 수 있었다. 그러나 입력을 입력하면 woudnt가 표시된다. 그래서 나는 그것을 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; 
    } 
} 

당신은 당신의 승인 선택에 대한 문자열 목록을 정의하고 입력 찾을 indexOf를 사용할 수

+0

나는 당신의 제안에서 그것을 작동 시켰습니다. 내 실수를 찾아 냈어. 귀하의 의견을 주셔서 감사합니다 @ 11684 – user2278109

2

을 테스트하지 입력. 그런 다음 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 
} 

하거나, 마지막으로, 당신은 단지 문자열과 사용의 첫 번째 문자를 가져올 수 없습니다 자바 7 ;-)

+0

우리는 아직 indexOf로 가르쳐왔다 havnt. 어쨌든 고마워! – user2278109

+0

좋은 답변, 내 것보다 훨씬 낫다. 목록의 트릭은 훌륭합니다! – 11684

관련 문제