当前位置: 首页 > 知识库问答 >
问题:

方法有问题

郎鹤龄
2023-03-14

好的,我有一个课堂作业,为老师写的一个石头,纸,剪刀程序创建3个预先确定的方法。但是,当我运行程序时,它会连续多次运行这些方法。我把代码看了好几遍,还是弄不明白问题所在。

下面是老师提供的部分课程:

public class Game
{

    public static void main (String[] args)
    {
        Scanner in = new Scanner (System.in);
        RockPaperScissors rps = new RockPaperScissors ();  //***Your class

        int numGames = 0;
        String userChoice = "";
        String cpuChoice = "";
        String winner = "";
        int userWins = 0;
        int cpuWins = 0;


        System.out.println("Welcome to Rock, Paper, Scissors!\n");

        //Get odd number of games
        System.out.println("How many rounds would you like to play?");
        numGames = in.nextInt();

        while (numGames % 2 == 0) //Even number
        {
            System.out.println("Sorry, number of games must be odd.  Please try again:");
            numGames = in.nextInt();
        }

        //Flush the buffer
        in.nextLine();

        //Play the game for the number of rounds the user entered
        for (int i = 1; i <= numGames; i++)
        {
            //Get the user and computer choices
            userChoice = rps.getUserChoice();  //***Your method
            cpuChoice = rps.getCPUChoice();   //***Your method


            System.out.println("Computer chooses " + cpuChoice);

            //Pick winner
            winner = rps.pickWinner(userChoice, cpuChoice);  //***Your method


            if (winner.equalsIgnoreCase("Tie"))
            {
                System.out.println("It's a tie!  Play again.");
                numGames++;
            }
            else
            {
                if (winner.equalsIgnoreCase("User"))
                {
                    userWins++;
                }
                else if (winner.equalsIgnoreCase("Computer"))
                {
                    cpuWins++;
                }
                else
                {
                    System.out.println("Error in picking winner");
                }

                System.out.println(winner + " wins!");
            }

        } //end for

        //Print results
        System.out.println("\nUser wins: " + userWins);
        System.out.println("Computer wins: " + cpuWins);

        if (userWins > cpuWins)
        {
            System.out.println("\nThe user won!");
        }
        if (cpuWins > userWins)
        {
            System.out.println("The computer won!");
        }

        //Close game
        System.out.println("\nThank you for playing!");

    } //end main

} //end class
public class RockPaperScissors {


    public String getUserChoice() {
        Scanner sc = new Scanner (System.in);
        System.out.println("Enter your choice:");
        String userInput = sc.nextLine();
        boolean end = true;
        while (end == true){

            //Checks for valid user responses
            if (userInput.equals("rock") || userInput.equals("paper")|| userInput.equals("scissors")){
                end = false;
            }
            else {
                System.out.println("Invalid response. Please enter rock paper or scissors:");
                userInput = sc.next();
            }
        }

        return userInput;
    }// end getUsechoice

    public String getCPUChoice() {

        String computerChoice = " ";
        Random rand = new Random();
        int randomNum = rand.nextInt(3) + 1;
        if (randomNum == 1){
            computerChoice = "rock";
        }
        else if (randomNum == 2){
            computerChoice = "paper";
        }
        else if (randomNum == 3){
            computerChoice = "scissors";
        }


        return computerChoice;
    }

    public String pickWinner(String userChoice, String cpuChoice) {
        String result = " ";
        if (getUserChoice().equalsIgnoreCase("rock")) { 
            if (getCPUChoice().equalsIgnoreCase("rock")){
                result = "tie"; 
            }
            else if (getCPUChoice().equalsIgnoreCase("paper")){
                result = "Computer";
            }
            else if (getCPUChoice().equalsIgnoreCase("scissors")){
                result = "User";
            }       
        }
        else if (getUserChoice().equalsIgnoreCase("paper")){
            if (getCPUChoice().equalsIgnoreCase("paper")){
                result = "tie";
            }
            else if (getCPUChoice().equalsIgnoreCase("rock")){
                result = "User";
            }
            else if (getCPUChoice().equalsIgnoreCase("scissors")){
                result = "Computer";
            }
        }
        else if (getUserChoice().equalsIgnoreCase("Scissors")){
            if (getCPUChoice().equalsIgnoreCase("scissors")){
                result = "tie";
            }
            else if (getCPUChoice().equalsIgnoreCase("rock")){
                result = "Computer";
            }
            else if (getCPUChoice().equalsIgnoreCase("Paper")){
                result = "User";
            }
        }
        return result;



    }//end pickWinner

}//end rockPaperScissors

以下是该程序的示例会话:

欢迎来到石头,纸,剪刀!

你想打几局?1输入你的选择:岩石电脑选择纸张输入你的选择:岩石输入你的选择:岩石电脑赢!

public String pickWinner(String userChoice, String cpuChoice) {
        String result = " ";


        if (userChoice.equalsIgnoreCase("rock")) { 
            if (cpuChoice.equalsIgnoreCase("rock")){
                result = "tie"; 
            }
            else if (cpuChoice.equalsIgnoreCase("paper")){
                result = "Computer";
            }
            else if (cpuChoice.equalsIgnoreCase("scissors")){
                result = "User";
            }       
        }
        else if (userChoice.equalsIgnoreCase("paper")){
            if (cpuChoice.equalsIgnoreCase("paper")){
                result = "tie";
            }
            else if (cpuChoice.equalsIgnoreCase("rock")){
                result = "User";
            }
            else if (cpuChoice.equalsIgnoreCase("scissors")){
                result = "Computer";
            }
        }
        else if (userChoice.equalsIgnoreCase("Scissors")){
            if (cpuChoice.equalsIgnoreCase("scissors")){
                result = "tie";
            }
            else if (cpuChoice.equalsIgnoreCase("rock")){
                result = "Computer";
            }
            else if (cpuChoice.equalsIgnoreCase("Paper")){
                result = "User";
            }
        }
        return result;



    }//end pickWinner

共有1个答案

霍建章
2023-03-14

您在pickWinner方法中调用getUserChoice()。它应该是您应该检查的userChoice方法参数。

public String pickWinner(String userChoice, String cpuChoice) {
String result = " ";
if (userChoice.equalsIgnoreCase("rock")) { 
    if (cpuChoice.equalsIgnoreCase("rock")){
        result = "tie"; 
    }
    else if (cpuChoice.equalsIgnoreCase("paper")){
        result = "Computer";
    }
    else if (cpuChoice.equalsIgnoreCase("scissors")){
        result = "User";
    }       
}
else if (userChoice.equalsIgnoreCase("paper")){
    if (cpuChoice.equalsIgnoreCase("paper")){
        result = "tie";
    }
    else if (cpuChoice.equalsIgnoreCase("rock")){
        result = "User";
    }
    else if (cpuChoice.equalsIgnoreCase("scissors")){
        result = "Computer";
    }
}
else if (userChoice.equalsIgnoreCase("Scissors")){
    if (cpuChoice.equalsIgnoreCase("scissors")){
        result = "tie";
    }
    else if (cpuChoice.equalsIgnoreCase("rock")){
        result = "Computer";
    }
    else if (cpuChoice.equalsIgnoreCase("Paper")){
        result = "User";
    }
}
return result;
 类似资料:
  • 问题内容: 我需要对一段字符串进行简单的字符串替换操作。我遇到了以下问题,希望能得到一些建议。 在我得到的原始字符串中,我可以将字符串替换为其他字符串。 但是,在相同的原始字符串中,如果我想替换一个很长的字符串,例如以下字符串,它将无法正常工作。通话后,一切都不会被替换。 我尝试了以下两种方法: 提前致谢。 问题答案: 您需要掌握替换结果并进一步使用它: 说明:Java中的字符串是 不可变的 。的

  • 问题内容: 这是我的方法: 我把它放回去。该方法有什么问题? 问题答案: 您的条件应为i * i <= num 您未考虑数字9,因此9 <9将导致错误。但是您需要检查9。

  • 好吧,我现在有四种类型的员工。经理(每周领取固定工资)、设计工人(在工作的前40小时内获得固定的小时工资,以及“一个半时间”,即加班时间的1.5倍于他们的小时工资)、销售人员(他们获得250美元加上每周总销售额的5.7%)和制造业(他们生产的每件物品每件物品获得固定金额的钱 - 该公司的每个制造商只从事一种类型的项目)。这是我的类:员工类的问题是我得到这个输出: 这意味着它为我的所有计算都得到0,

  • 我在我的程序中使用了实现继承,我的子类中的方法没有在主方法中被调用。它显示了错误“方法getArea()不在第二类型中定义”。getPerimeter()方法也有同样的问题。 我试过设置值和改变参数。 三角形。有关计算三角形面积的公式,请参见编程练习2.15。toString()方法的实现如下:return“Triangle:side1=“side1”side2=“side2”side3=“sid

  • 问题内容: 我正在进行代码审查,并遇到了一个使用所有静态方法的类。入口方法接受几个参数,然后开始调用其他静态方法,并传递入口方法接收到的所有或某些参数。 它不像具有大量不相关的实用程序功能的Math类。在我自己的常规编程中,我很少编写Resharper弹出并说“这可能是静态方法”的方法,而当我这样做时,它们往往是无用的实用方法。 这种模式有什么问题吗?如果类的状态保存在字段和属性中或使用参数在静态

  • 是的,我知道这里有很多方法。这是任务的一部分。在这段代码中,除了输入相等的数字之外,一切都正常工作 }