如果给出无效响应,请重新运行 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,请重新启动安装,请问这个怎么解决,谢谢!

android10设置默认launcher无效

CSRF 令牌无效。请尝试重新提交表单。 Symfony 4

CSRF 令牌无效。请尝试重新提交表单

安装win7原版时提示“windows无法完成安装,若要在此计算机上安装,请重新启动安装”