首页 > 解决方案 > java初学者石头剪刀布游戏

问题描述

我正在为我的 Java 入门课程开发“石头、纸、剪刀”游戏。提示如下:创建一个“石头、纸、剪刀”游戏,计算机随机选择石头、纸或剪刀。让用户输入 1、2 或 3 的数字,每个代表三个选项之一。确定赢家。游戏应该要求用户再次玩,如果是则继续,如果不是则停止。一旦用户停止播放程序应该打印获胜的总数。

我在正确的位置声明变量时遇到问题,因为我正在尝试使用一种方法,以便可以调用它再次玩游戏。

import java.util.Scanner;
import java.util.Random;
public class RockPaperScissors 
{
public static void main (String[] args) 
{    
    Scanner input = new Scanner(System.in);
    System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
    System.out.println("Answer \"yes\" or \"no\"");
    input.next();
    String answer = input.next();
}

    
public static int letsPlay()
{
    int cMove; 
    int userMove = 0; 
    int cScore = 0; 
    int pScore = 0; 
    int tie = 0;
    int rounds = 0; 
    Random r = new Random();
    

    while (answer.equalsIgnoreCase("yes")) 
        cMove = r.nextInt(3)+1;
        System.out.println("Choose your move!");
        System.out.println("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ");
        userMove = input.nextInt(); 
        while(input.hasNextInt()) {
            if (userMove!=1 && userMove!=2 && userMove!=3)
            {
                System.out.println("Invalid move. Try again.");
                System.out.println("Enter your move: ");
                input.nextInt();
            }
        } 
        if(userMove==1)
        {
            System.out.println("You have chosen Rock!");  
        }
        else if(userMove==2)
        {
            System.out.println("You have chosen Paper!");  
        }
        else if(userMove==3)
        {
            System.out.println("You have chosen Scissors!");  
        }

            if (userMove == cMove) 
            { 
                System.out.println("Tie Game!");
                System.out.println("");
                tie++;
                rounds++;
            } else if (cMove==1 && userMove==3)
                {
                    System.out.println("Computer chose Rock!");
                    System.out.println("Rock beats Scissors!");
                    System.out.println("Computer Wins!");
                    cScore++;
                    rounds++;
                } 

                else if (cMove==1 && userMove==2) 
                {
                    System.out.println("Computer chose Rock!");
                    System.out.println("Paper beats Rock!");
                    System.out.println("Player Wins!");
                    pScore++;
                    rounds++;
                } 

                else if (cMove==2 && userMove==3) 
                {
                    System.out.println("Computer chose Paper!");
                    System.out.println("Scissors beats Paper!");
                    System.out.println("Player Wins!");
                    pScore++;
                    rounds++;
                } 

                else if (cMove==2 && userMove==1)
                {
                    System.out.println("Computer chose Paper!");
                    System.out.println("Paper beats Rock!");
                    System.out.println("Computer Wins!");
                    cScore++;
                    rounds++;
                } 

                else if (cMove==3 && userMove==1)  
                {
                    System.out.println("Computer chose Scissors!");
                    System.out.println("Rock beats Scissors!");
                    System.out.println("Player Wins!");
                    pScore++;
                    rounds++;
                } 

                else if (cMove==3 && userMove==2) 
                {
                    System.out.println("Computer chose Scissors!");
                    System.out.println("Scissors beats Paper!");
                    System.out.println("Computer Wins!");
                    cScore++;
                    rounds++;
                }
            
        System.out.println("Would you like to play again?");
        System.out.println("Answer \"yes\" or \"no\"");
        input.next();
        String yesorno = input.next();
        if(yesorno.equalsIgnoreCase("yes"))
        {
            letsPlay();
        }
        else {
            System.out.println ("Here are the final scores after " + rounds +" rounds:");
            System.out.println ("You: "+ pScore + "Computer: "+ cScore + "Ties: " + tie);
            }
    }    
}

到目前为止编辑的代码,它说我的letsPlay方法缺少返回语句:不确定如何继续..

import java.util.Scanner;
import java.util.Random;
public class RockPaperScissors 
{
public static void main (String[] args) 
{    
Scanner input = new Scanner(System.in);
System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
System.out.println("Answer \"yes\" or \"no\"");
String answer = input.next();
letsPlay(answer);
}



public static int letsPlay(String answer)
{
int cMove; 
int userMove = 0; 
int cScore = 0; 
int pScore = 0; 
int tie = 0;
int rounds = 0; 
Random r = new Random();
Scanner input = new Scanner(System.in);
cMove = r.nextInt(3)+1;

while (answer.equalsIgnoreCase("yes")) 
    
    System.out.println("Choose your move!");
    System.out.println("Enter 1 for Rock, 2 for Paper, or 3 for Scissors: ");
    userMove = input.nextInt(); 
    while(input.hasNextInt()) {
        if (userMove!=1 && userMove!=2 && userMove!=3)
        {
            System.out.println("Invalid move. Try again.");
            System.out.println("Enter your move: ");
            input.nextInt();
            
        }
    } 
    if(userMove==1)
    {
        System.out.println("You have chosen Rock!");  
    }
    else if(userMove==2)
    {
        System.out.println("You have chosen Paper!");  
    }
    else if(userMove==3)
    {
        System.out.println("You have chosen Scissors!");  
    }

        if (userMove == cMove) 
        { 
            System.out.println("Tie Game!");
            System.out.println("");
            tie++;
            rounds++;
        } else if (cMove==1 && userMove==3)
            {
                System.out.println("Computer chose Rock!");
                System.out.println("Rock beats Scissors!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            } 

            else if (cMove==1 && userMove==2) 
            {
                System.out.println("Computer chose Rock!");
                System.out.println("Paper beats Rock!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } 

            else if (cMove==2 && userMove==3) 
            {
                System.out.println("Computer chose Paper!");
                System.out.println("Scissors beats Paper!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } 

            else if (cMove==2 && userMove==1)
            {
                System.out.println("Computer chose Paper!");
                System.out.println("Paper beats Rock!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            } 

            else if (cMove==3 && userMove==1)  
            {
                System.out.println("Computer chose Scissors!");
                System.out.println("Rock beats Scissors!");
                System.out.println("Player Wins!");
                pScore++;
                rounds++;
            } 

            else if (cMove==3 && userMove==2) 
            {
                System.out.println("Computer chose Scissors!");
                System.out.println("Scissors beats Paper!");
                System.out.println("Computer Wins!");
                cScore++;
                rounds++;
            }
        
        
    System.out.println("Would you like to play again?");
    System.out.println("Answer \"yes\" or \"no\"");
    input.next();
    answer = input.next();
    
    if(answer.equalsIgnoreCase("yes"))
    {
        main(null);
    }
    else {
        System.out.println ("Here are the final scores after " + rounds +" 
rounds:");
        System.out.println ("You: "+ pScore + "Computer: "+ cScore + "Ties: " 
+ tie);
        }
    }
}

标签: java

解决方案


您没有将 String 答案传递给您的letsPlay() 方法,这是因为您的letsPlay() 方法不能将String 作为参数,因为它是在没有传递参数的情况下定义的。解决此问题的方法是将方法定义更改为需要 String 变量。

public static int letsPlay()

变成

public static int letsPlay(String userInput)

然后在您的方法中,您在 letPLay(S​​tring userInput) 方法中使用变量 userInput 而不是 String answer。

您遇到的下一个问题是您在方法中再次调用该方法。这称为递归,它是完全合法的,但在这种情况下并不理想。一旦游戏结束,您应该退出游戏,并在您的 main() 方法中询问用户是否想再次玩游戏。

public static void main (String[] args) 
{    
    Scanner input = new Scanner(System.in);
    
    do
    {
        System.out.println("Would you like to play \"Rock, Paper, Scissors?\"");
        System.out.println("Answer \"yes\" or \"no\"");
        String answer = input.nextLine();
        letsPlay(answer);

    }while(answer.equalsIgnoreCase("yes"));

}

推荐阅读