这大部分都会重复,但我真的不知道如何搜索这个问题,因为它太长而复杂。提前抱歉!
回到问题,我想说我使用Scanner类从用户那里获得了一个输入。想象一下,扫描仪已导入并且一切都已设置。
Scanner scan = new Scanner();
String input = scan.nextLine();
switch( input) {
case "attack":
System.out.println( "You attacked the enemy!");
break;
case "defend":
System.out.println( "You blocked the enemy!");
break;
default:
System.out.println( "This is not an option!");
// somehow repeat the process until one of the case options are
// entered.
}
在案件执行之前,我如何重复这个请求输入和检查案件的过程?
我可以把它放在while循环中,当输入case选项时我可以退出while循环,但是当我有足够的switch / if语句需要一个可靠的输入时,这似乎太多了代码为了处理剩下的代码。 有没有办法在Java中更有效地做到这一点?
答案 0 :(得分:3)
Scanner scan = new Scanner(System.in);
loop:
while (true) {
String input = scan.nextLine();
switch (input) {
case "attack":
System.out.println("You attacked the enemy!");
break loop;
case "defend":
System.out.println("You blocked the enemy!");
break loop;
default:
System.out.println("This is not an option!");
break;
}
}
你知道, while (true)
会产生无限循环。在switch语句中,如果输入是攻击或防御,我们就会突破循环。如果它们都不是那些,我们只会断开switch语句。
while循环标有loop:
标签。这样我们就可以告诉它break loop;
打破循环。另一方面,break
只会断开switch语句。
答案 1 :(得分:1)
一种可能的选择是使用有效选项创建Map<String, String>
并将其传递给具有无限循环的方法,如果用户提供有效选项则返回它(可能在执行某些操作后);否则显示无效选项消息并再次循环。像,
public static String getCommand(Scanner scan, Map<String, String> options) {
while (true) {
String input = scan.nextLine();
if (options.containsKey(input)) {
System.out.println(options.get(input));
return input;
} else {
System.out.printf("%s is not an option!%n", input);
}
}
}
然后可以将上面的内容称为
Scanner scan = new Scanner(System.in);
Map<String, String> options = new HashMap<>();
options.put("attack", "You attacked the enemy!");
options.put("defend", "You blocked the enemy!");
String cmd = getCommand(scan, options);
之后cmd
将是attack
或defend
之一。请注意,通过这种方式,您可以根据需要添加options
(或类型options
),并重复使用getCommand
。
答案 2 :(得分:0)
因此,如果您进入防守或攻击,它将不会再次询问,否则重复该过程。试试这个:
do{
String input = scan.nextLine();
switch( input) {
case "attack":
System.out.println( "You attacked the enemy!");
break;
case "defend":
System.out.println( "You blocked the enemy!");
break;
default:
System.out.println( "This is not an option!");
// somehow repeat the process until one of the case options are
// entered.
}
}while(!"attack".equalsIgnoreCase(input) || !"defend".equalsIgnoreCase(input))