如果给出无效响应,请重新运行 main 方法?
Posted
技术标签:
【中文标题】如果给出无效响应,请重新运行 main 方法?【英文标题】:Rerun main method if an invalid response is given? 【发布时间】:2016-05-29 18:02:25 【问题描述】:所以我不久前使用 Java 制作了这个剪刀石头布游戏,但我发现了一个小错误,我今天向朋友展示时忘记修复它。基本上,代码接受用户输入(即石头、纸或剪刀),如果他们的输入不等于石头、纸或剪刀,则主 while 循环被破坏并且游戏停止。
我怎样才能让它不仅打破循环,而且重新启动它?我想这样做,以便当有人输入无效输入时它会自动重新启动,以便播放器不需要重新运行程序。
这是我的 main 类的代码:
public class rps
public static void main(String []args)
boolean gameRunning = true;
while(gameRunning)
System.out.println("Do you choose rock, paper, or scissors?");
UserChoice userInput = new UserChoice();
String userChoice = userInput.userDecide();
if(userChoice != "rock" || userChoice != "paper" || userChoice != "scissors")
System.out.println("'" + userChoice + "'" + " is not a valid choice.");
System.out.println("Please choose between rock, paper, or scissors.");
gameRunning = false;
break;
// this is where I want to restart the function
System.out.println("You threw: " + userChoice);
ComputerInput computerChoice = new ComputerInput();
String computerInput = computerChoice.computerDecide();
System.out.println("Computer threw: " + computerInput);
CompareChoices compareResults = new CompareChoices();
gameRunning = compareResults.compare(userChoice, computerInput);
;
更新
感谢这里好心人的帮助,我发现了一些问题。我用 && 代替 || (这很愚蠢,因为我最初还是使用 && -_-),我使用了“继续”语句而不是 break,我删除了 gameRunning = false;
,并更改了 userChoice
与有效响应进行比较的方式。
我没有将它与“rock”和“paper”之类的字符串进行比较,而是创建了一个数组
(String validChoices[] = "rock", "paper", "scissors";
) 包含有效响应。然后我将userChoice
与数组的索引进行了比较。
这是我的新代码:
public class rps
public static void main(String []args)
boolean gameRunning = true;
while(gameRunning)
System.out.println("Do you choose rock, paper, or scissors?");
UserChoice userInput = new UserChoice();
String userChoice = userInput.userDecide();
String validChoices[] = "rock", "paper", "scissors";
if(!userChoice.equals(validChoices[0]) && !userChoice.equals(validChoices[1]) && !userChoice.equals(validChoices[2]))
System.out.println("'" + userChoice + "'" + " is not a valid choice.");
System.out.println("Please choose either rock, paper, or scissors.");
continue;
System.out.println("You threw: " + userChoice);
ComputerInput computerChoice = new ComputerInput();
String computerInput = computerChoice.computerDecide();
System.out.println("Computer threw: " + computerInput);
CompareChoices compareResults = new CompareChoices();
gameRunning = compareResults.compare(userChoice, computerInput);
;
谢谢大家!
【问题讨论】:
为避免不可避免的后续问题,请阅读:How do I compare strings in Java? 你的 if 语句是错误的。它应该使用 && 而不是 ||。你现在的表达总是正确的。 【参考方案1】:不要将gameRunning设置为false,不使用break,使用continue,它将忽略循环的其余部分并重新开始循环。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
【讨论】:
好的,让它为那部分工作。当我输入无效响应(即我使用香蕉)时,它会重新启动循环并再次询问我。但是当我输入一个有效的响应(即摇滚)时,它仍然说它是一个无效的响应并重新启动循环。【参考方案2】:几个问题。将您的循环条件设置为 false 并中断将无法重新启动循环。此外,正如@resueman 暗示的那样。使用 .equals() 而不是 == 来比较字符串。我的建议是将错误检查放在另一个 while 循环中。
while(!userChoice.equals("rock") && !userChoice.equals("paper") && !userChoice.equals("scissors"))
System.out.println("Your choice was invalid, try again");
userChoice = userInput.userDecide();
另外,你也许应该在你的 while 循环之外声明这些东西(我在想你的 ComputerInput、UserInput 和 CompareChoices 对象)。
【讨论】:
非常感谢!!!!我想出了 && 并继续它的一部分,但我真正的问题是比较运算符。而不是 != 我使用了 .equals 方法。它现在就像一个魅力!以上是关于如果给出无效响应,请重新运行 main 方法?的主要内容,如果未能解决你的问题,请参考以下文章
windows无法完成安装,若要在此计算机上安装,请重新启动安装
WINDOWS无法完成安装,若要在此计算机上安装windows,请重新启动安装,请问这个怎么解决,谢谢!