2017-02-24 54 views
-2

我正在尝试为我的Java类编写一个RockPaperScissors游戏,但我遇到了代码问题。当它运行时,有时它输出错误的东西,有时它是正确的。如何解决用Java编写的我的RockPaperScissors游戏?

例如,当用户输入P时,计算机要么用Tie,My Point或Your Point来回答,然后在下面会说出我们每个人都玩的东西。但通常它会说“你的观点!” “R击败R”。

import java.util.Scanner; 
public class RockPaperScissors 
{  
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 

    int tie = 0; 
    int win = 0; 
    int loss = 0; 

    String playerChoice; 
    System.out.println(RockPaperScissors.getComputerChoice()); 

    while (true) 
    { 
     System.out.println(); 
     System.out.print("(R)ock, (P)aper, (S)cissors, or quit: "); 

     playerChoice = input.nextLine(); 


     if (playerChoice.equalsIgnoreCase("quit")) break; 
     else    
       //switch statement 

      if (playerChoice.equalsIgnoreCase(
       RockPaperScissors.getComputerChoice())) 
      { 
       System.out.println("Tie!"); 
       tie++; 
      } 

      else if ((playerChoice.equalsIgnoreCase("R") && 
         RockPaperScissors.getComputerChoice().equals("S")) || 
        (playerChoice.equalsIgnoreCase("P") && 
         RockPaperScissors.getComputerChoice().equals("R")) || 
        (playerChoice.equalsIgnoreCase("S") && 
         RockPaperScissors.getComputerChoice().equals("P"))) 
      { 
       System.out.println("Your Point!"); 
       System.out.println(playerChoice + " beats " 
        + RockPaperScissors.getComputerChoice()); 
       win++; 

      } 

      else if ((playerChoice.equalsIgnoreCase("R") && 
         RockPaperScissors.getComputerChoice().equals("P")) || 
        (playerChoice.equalsIgnoreCase("P") && 
         RockPaperScissors.getComputerChoice().equals("S")) || 
        (playerChoice.equalsIgnoreCase("S") && 
         RockPaperScissors.getComputerChoice().equals(""))) 
      { 
       System.out.println("My Point!"); 
       System.out.println(RockPaperScissors.getComputerChoice() 
        + " beats " + playerChoice); 
       loss++; 

      } 

      else 
      { 
       System.out.println("Invalid Input!"); 

      } 
    } 
    System.out.println(); 
    System.out.println("You won " + win + " times."); 
    System.out.println("You lost " + loss + " times."); 
    System.out.println("We tied " + tie + " times."); 
} 


public static String getComputerChoice() 
{ 

    int compChoiceInt; 
    String compChoice; 
    compChoiceInt = (int) (Math.random() * 3); 
    switch (compChoiceInt) 
    { 
     case 0: 
      compChoice = "R"; 
      break; 
     case 1: 
      compChoice = "P"; 
      break; 
     case 2: 
      compChoice = "S"; 
      break; 
     default: 
      compChoice = "Invalid Input"; 
      System.out.println("Invalid Input."); 
      break; 
    } 

    return compChoice; 

} 
+3

你为什么一遍又一遍地调用'getComputerChoice'?声明一个变量,将一次调用的结果赋值给它,然后在你的开关中使用它(你似乎决定改为一系列'if..else'语句)。函数调用应该位于获取玩家输入的循环中的同一点。 –

回答

2

您在代码中多次调用getComputerChoice()来决定用户是赢,输或关系。这可能导致几个不同的可能的结果到每一轮,因为这些方法调用的每一个都会导致随机生成一个新的选择。而不是多次调用该方法,在将它与玩家的选择进行比较之前,声明一个变量并调用它一次。