如何在switch语句中重复某个case的代码而不为其他语句重复?

时间:2015-03-29 19:24:02

标签: java

我正在制作基于文本的冒险游戏。在一个房间里,我想问玩家该做什么,如果他进门,他/她就会移动到下一个房间。如果他/她拿起手电筒,那么你想做什么?"问题重复,所以他们可以在那之后通过门。这是我的代码:

case 1:
                System.out.println("What do you want to do? Type 'door' to go through the door or 'flashlight' to pick up the flashlight.");
                String roomOneAction = input.nextLine();

                switch(roomOneAction) {

                    case "flashlight":
                        System.out.println("Picked up flashlight.");
                        //repeat what do you want to do? question
                        break;

                    case "door":
                        System.out.println("You open the door.");
                        //continue plot, don't repeat question
                        break;

                    default:
                        System.out.println("Error");
                        // repeat what do you want to do? question
                        break;
                    }
                break;

现在使用此代码,它会针对您键入的任何内容重复该问题。如果" door"我不希望这种情况发生。输入。

此外,我怎样才能这样做,以便一旦拿起手电筒并重复问题,手电筒不能再次被拿起?

4 个答案:

答案 0 :(得分:1)

这可能接近你想要的:

import java.util.Scanner;

public class Game {
    private static boolean flashlightPicked = false;
    private static boolean doorEntered = false;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while (true) {
            int x = 1;
            switch (x) {
            case 1:
                System.out
                        .println("What do you want to do? Type 'door' to go through the door or 'flashlight' to pick up the flashlight.");
                String roomOneAction = input.nextLine();

                switch (roomOneAction) {

                case "flashlight" :
                    if(!flashlightPicked){
                        System.out.println("Picked up flashlight.");
                        flashlightPicked = true;
                    } else {
                        System.out.println("Already picked up flashlight!");
                    }
                    // repeat what do you want to do? question
                    break;

                case "door":
                    if(!doorEntered){
                        System.out.println("You open the door.");
                        doorEntered = true;
                    }else{
                        System.out.println("Already opened the door!");
                    }
                    // continue plot, don't repeat question
                    break;

                default:
                    System.out.println("Error");
                    // repeat what do you want to do? question
                    break;
                }
        }
    }
}

答案 1 :(得分:1)

在这种情况下,如果您想再次询问,您应该存储信息:

boolean askAgain = true;
//...
case "door":
    //...
    askAgain = false;
//...
if (askAgain) {
    System.out.println("...");
}

答案 2 :(得分:1)

我建议在这里使用while循环。玩家可以在房间里做任何其他事情,还是以不同的方式离开房间?如果他们只能使用'door'命令离开房间,请设置while循环以使终止因子为'door'命令。

答案 3 :(得分:0)

我不喜欢像你一样级联多个开关的想法。您应该使用state patterncommand pattern,但我认为您是编程初学者,因此我只是尝试回答您的问题。


roomOneAction开关语句包含在while循环中,如

boolean foundFlashlight = false;
boolean askAgain = true;
while (askAgain)
{
  // question + switch statement and so on
}

如果玩家选择了闪光灯,请将foundFlashlight设为true

在下一次比赛中,球员再次被问到。如果他选择手电筒, 如果值为foundFlashlight,则必须评估true变量, 告诉玩家他已经有手电筒,他应该再回答。

在门的情况下,只需将askAgain设置为false.然后终止循环。


但同样,这是一种漂亮,干净且易于维护的方法。你应该看看一些设计模式。特别是上面提到的国家模式。