我不知道如何离开这个循环结构
I don't know how to leave this looping structure
好的,所以下面的代码循环得很好。只要它愿意,它就可以循环。但问题是,我永远无法摆脱困境。顺便说一下,我正在尝试为那些想知道的人构建一个文字冒险,但我真的需要摆脱这个循环。
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;
}
}
您需要将heroclass.toLowerCase();
赋值给heroclass
的原始值:
heroclass = heroclass.toLowerCase();
如果不这样做,则不会保存小写版本的 heroclass。
将你的循环放在一个带标签的块中:
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
; 分配的魔法值;不管它是什么它都有效。
此外,我添加了部分以使其不区分大小写。抱歉造成混淆!
heroclass是String类型。字符串是不可变类型的对象,所以你不能更新这个字符串。 heroclass.toLowerCase() 只是 return 另一个具有小写字符的 String 对象,因此您需要将此字符串结果重新分配给此变量:
heroclass = heroclass.toLowerCase();
虽然编码袋熊是正确的,但我不是很喜欢你在这里做事的方式。像这样围绕整个程序循环并不是一个好习惯。它超级笨重,会导致很多问题,更不用说你自己让事情变得更复杂了。理想情况下,您希望将程序的这个 class 选择部分放在一个方法中。然后如果用户的输入无效,只需递归回调该方法,直到得到正确的输入。
例如。
情况 A:这样做...
情况 B:这样做...
case C: System.out.println("输入无效);, classSelector();
此外,当您使用 OOP 时,您可以获得将玩家的所有属性存储在一个对象中以及创建操作这些属性的方法的好处。它将使您的代码更清晰,更易于使用。
例如
Player1.heal(10);
好的,所以下面的代码循环得很好。只要它愿意,它就可以循环。但问题是,我永远无法摆脱困境。顺便说一下,我正在尝试为那些想知道的人构建一个文字冒险,但我真的需要摆脱这个循环。
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;
}
}
您需要将heroclass.toLowerCase();
赋值给heroclass
的原始值:
heroclass = heroclass.toLowerCase();
如果不这样做,则不会保存小写版本的 heroclass。
将你的循环放在一个带标签的块中:
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
; 分配的魔法值;不管它是什么它都有效。
此外,我添加了部分以使其不区分大小写。抱歉造成混淆!
heroclass是String类型。字符串是不可变类型的对象,所以你不能更新这个字符串。 heroclass.toLowerCase() 只是 return 另一个具有小写字符的 String 对象,因此您需要将此字符串结果重新分配给此变量:
heroclass = heroclass.toLowerCase();
虽然编码袋熊是正确的,但我不是很喜欢你在这里做事的方式。像这样围绕整个程序循环并不是一个好习惯。它超级笨重,会导致很多问题,更不用说你自己让事情变得更复杂了。理想情况下,您希望将程序的这个 class 选择部分放在一个方法中。然后如果用户的输入无效,只需递归回调该方法,直到得到正确的输入。
例如。
情况 A:这样做...
情况 B:这样做...
case C: System.out.println("输入无效);, classSelector();
此外,当您使用 OOP 时,您可以获得将玩家的所有属性存储在一个对象中以及创建操作这些属性的方法的好处。它将使您的代码更清晰,更易于使用。
例如
Player1.heal(10);