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