我不知道如何离开这个循环结构

时间:2016-01-21 23:01:24

标签: java bluej

好的,所以下面的代码循环很好。它可以循环,只要它想要。但问题是,我永远无法摆脱困境。对于那些想知道的人来说,我正在尝试构建文本冒险,但我真的需要摆脱这种循环。

    System.out.println("\n\nWelcome, " + name + "! To proceed, enter your class of fighter.");
    System.out.println();
    boolean x = true;
    while (x){
        //information print statements

        System.out.println("What will your class be?  ");
        String heroclass = scan.nextLine();
        heroclass.toLowerCase();
        String A;
        switch (heroclass)
        {
            case "slayer": A = "You have selected the Slayer class.";
            break;
            case "blader": A = "You have selected the Blader class.";
            break;
            case "bandit": A = "You have selected the Bandit class.";
            break;
            case "wizard": A = "You have selected the Wizard class.";
            break;
            default: A = "Invalid entry.";
            break;
        }
        String killloop = A;
        if (killloop.charAt(0) == 'Y'){
            x = false;
        }
    }

4 个答案:

答案 0 :(得分:7)

您需要将REDIS_URL分配给原始值heroclass.toLowerCase();

heroclass

如果不这样做,则不保存heroclass的小写版本。

答案 1 :(得分:1)

将循环放在标记的块中:

myblock: {
    while (true) {
        //code
        heroclass = heroclass.toLowerCase();
        switch(heroclass)
        {
            case "slayer": A = "text";
                break myblock;

            //repeat with other cases
        }
    }
}
//goes to here when you say "break myblock;"

您所做的基本上是将标签myblock分配给整个循环。当你说break myblock时,它会突破括号内的整个部分。

注意:我建议使用此解决方案,因为它不依赖于switch指定的魔术值;无论它是什么,它都有效。

另外,我添加了部分以使其不区分大小写。对此感到抱歉!

答案 2 :(得分:1)

heroclass是String类型。 String是不可变类型的对象,因此您无法更新此字符串。 heroclass.toLowerCase()只返回另一个带有较小的字符串的String对象,因此您需要将此字符串结果重新分配给此变量:

heroclass = heroclass.toLowerCase();

答案 3 :(得分:0)

虽然编码袋熊是正确的,但我并不喜欢你在这里做事的方式。围绕整个程序循环这样的循环不是好习惯。它超级笨重,会导致很多问题,更不用说你为自己制造的东西更复杂了。理想情况下,您希望将此类选择部分放在方法中。然后,如果用户的输入无效,则只需递归回调该方法,直到输入正确为止。

实施例。

案例A:这样做......

案例B:这样做......

案例C:System.out.println(“非有效输入”);,classSelector();

此外,当您使用OOP时,您可以将所有玩家的属性存储在对象中,以及制作操纵这些属性的方法。它将使您的代码更清晰,更易于使用。

实施例

Player1.heal(10);