2013-04-14 131 views
0

如果我讓用戶從屏幕上的菜單輸出中輸入字符串中的值。我如何使用該輸入作爲switch語句?它保持它只能用於int。 例如,如果用戶輸入a,我希望它切換到case語句並執行操作。對不起,如果這是令人困惑。Switch Statement and Strings

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

你就不能得到字符串和使用的第一個字符,而不是一個String ?據我所知,你可以使用字符作爲開關。 – 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