如果输入了选项,如何重复if或switch语句?

时间:2016-12-25 02:51:33

标签: java if-statement switch-statement

这大部分都会重复,但我真的不知道如何搜索这个问题,因为它太长而复杂。提前抱歉!

回到问题,我想说我使用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中更有效地做到这一点?

3 个答案:

答案 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将是attackdefend之一。请注意,通过这种方式,您可以根据需要添加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))