Java 我不知道';我不知道如何离开这个循环结构
好的,下面的代码循环得很好。它可以循环任意时间。但问题是,我永远无法摆脱这个循环。顺便说一句,我正在尝试建立一个文本冒险,但是我真的需要摆脱这个循环Java 我不知道';我不知道如何离开这个循环结构,java,bluej,Java,Bluej,好的,下面的代码循环得很好。它可以循环任意时间。但问题是,我永远无法摆脱这个循环。顺便说一句,我正在尝试建立一个文本冒险,但是我真的需要摆脱这个循环 System.out.println("\n\nWelcome, " + name + "! To proceed, enter your class of fighter."); System.out.println(); boolean x = true; while (x){ //informa
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.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
时,它会打断括号内的整个部分
注意:我建议使用此解决方案,因为它不依赖于开关指定的魔法值;不管它是什么,它都能工作
此外,我还添加了该部分,使其不区分大小写。抱歉搞混了 类是字符串类型。字符串是不可变的对象类型,因此无法更新此字符串。heroclass.toLowerCase()只返回另一个大小写字符较低的字符串对象,因此需要将此字符串结果重新分配给此变量:
heroclass = heroclass.toLowerCase();
虽然编码袋熊是正确的,但我不是你在这里做事的方式的忠实粉丝。像这样对整个程序进行循环不是好的做法。它非常笨重,会导致很多问题,更不用说你让事情变得更复杂了。理想情况下,您希望将程序的这个类选择部分放在一个方法中。然后,如果用户的输入无效,只需递归调用该方法,直到获得正确的输入
前
案例A:这样做
案例B:这样做
案例C:System.out.println(“不是有效的输入”);类选择器()
此外,当你使用面向对象编程时,你可以将玩家的所有属性存储在一个对象中,并生成处理这些属性的方法。这将使你的代码更清晰,更容易使用
前
Player1.heal(10);您尝试了哪些输入?我使用了“杀手”、“布雷德”、“匪徒”和“巫师”试图从中得到一个好的答案。然后我尝试了“Fir-Tree”来获得错误的响应,但它只是不断循环。我想,你会不止一次地要求用户输入。也许你应该把循环/验证逻辑拉到一个方法中。谢谢,这很有意义。如果您再次出现错误,请尝试在代码中的不同点检查不同变量的值。通过这种方式,您可以看到heroclass的值并没有真正变为小写。如果这解决了你的问题,请接受答案并跟进我的建议。我会的,谢谢。这是一个我会尽力记住的技巧。这不是根本问题,请参阅编码袋熊的答案。我知道,但我认为他/她根本不应该使用字符串验证;它只是引入了一个不必要的魔法值。这不是问题的解决方案,这无法修复任何问题。此外,我的解决方案并不依赖于“神奇”值,而是依赖于简单的赋值logic@ostrichofevil您的答案在原始代码的基础上有所改进,但仍然会被破坏原始代码的相同问题打断。除此之外,您的答案仍然提供了一种非理想的方法(相反,类似于if classList.contains(inputClass)break;
语句的方法会更好)。是的,我必须同意您的观点,这段代码在@ostrichofevil上要干净得多,但如果用户输入像“Slayer”这样的值,它将无法自Slayer起工作!=杀手。如果您在switch语句中用heroclass.toLowerCase()替换heroclass,这将解决实际问题。虽然我同意您的一些观点,但这并不能回答提问者的问题,应该是对我的答案或他的问题的评论,而不是答案本身。