Switch Statement and Strings
如果我让用户从屏幕上的菜单输出输入一个字符串值。如何将该输入用于switch语句?它保留了它只能用于int。例如,如果用户输入,我希望它切换到case语句并执行操作。抱歉,如果这让人困惑的话。
1 2 3 4 5 6 7 8 9 10
| public static void sortData (short days [], String name []) {
String choice ;
Scanner kd = new Scanner (System. in);
System. out. println("a. Sort by Name
b. Sort by Day");
choice = kd. next(); // ????????
switch (choice ) {
case 1: { // ????????? |
- 你不能得到字符串的第一个字符,用它代替字符串吗?据我所知,你可以用字符作为开关。
- @11684我尝试使用char,它编译时不会出现任何错误,但是当我输入时,它不会显示任何内容。所以我把它改成了细绳。
- 你使用Java 7吗?在这种情况下,您可以使用字符串!
- @用户2278109查看我的答案。
您可以为接受的选择定义一个字符串列表,并使用indexOf查找输入的内容。之后,您可以使用switch中的索引。
这样地
1 2 3 4 5 6 7 8 9
| 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。
1 2 3
| enum Options {
name, day, color, smell
} |
然后
1 2 3 4 5 6 7 8 9
| try {
switch (Options. valueOf(choice )) {
case name : ...
case day : ...
// etc
}
} catch (IllegalArgumentException ex ) {
// none of them
} |
或者,最后,您切换到Java 7;-)
- 到目前为止,我们还没有被教导索引。不管怎样,还是谢谢你!!
- 回答很好,比我的好多了。清单上的技巧很棒!
据我所知,这没关系:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public static void sortData (short days [], String name []) {
char choice ;
Scanner kd = new Scanner (System. in);
System. out. println("a. Sort by Name
b. Sort by Day");
choice = kd. next(). toCharArray()[0];
switch (choice ) {
case 'a':
// do something
break;
case 'b';
// do something else
break;
}
} |
未测试
- 我是根据你的建议做的。发现了我的错误。感谢您的意见@11684