我无法通过我的摇滚,纸张,剪刀程序来阅读正确的结果

时间:2014-10-27 02:48:49

标签: java

每当我运行它时,似乎循环继续播放工作,但是只要conputerChoose执行randomGenerator,游戏结果就不会正确输出。请帮忙。我是java的新手,我们只想使用3种方法 - 说明,playGame和computerChoose。我们还假设使用用户控制的循环来继续工作。我似乎无法做到这一点,我仍然需要添加一个循环来计算游戏的播放时间,赢得的次数和计算机赢得的次数。

import java.util.*;

public class PRS {

    public static Scanner kbd = new Scanner(System.in);

    public static void instructions() {

        System.out.println("\nThis is the popular game of paper, rock, scissors.  Enter your"
                + "\nchoice by typing the word \"paper\", the word \"rock\" or the word"
                + "\n\"scissors\".  The computer will also make a choice from the three"
                + "\noptions.  After you have entered your choice, the winner of the"
                + "\ngame will be determined according to the following rules:"
                + "\n\nPaper wraps rock (paper wins)"
                + "\nRock breaks scissors (rock wins)"
                + "\nScissors cuts paper (scissors wins)"
                + "\n\nIf both you and the computer enter the same choice, then the game "
                + "\nis tied.\n");

    }

    public static int playGame(){

        int outcome = 0;
        System.out.print("Enter your choice: ");
        kbd = new Scanner(System.in);
        String player = kbd.nextLine().toLowerCase();
        String computerChoice = computerChoose();
        System.out.println("\nYou entered: " + player);
        System.out.println("Computer Chose: " + computerChoose());

        if(player.equals(computerChoose())){

            outcome = 3;


        } 

        else if (player.equals("paper") && computerChoice.equals("rock")){

            outcome = 1;

        }
        else if (computerChoice.equals("paper") && player.equals("rock")){

            outcome = 2;
        }
        else if (player.equals("rock") && computerChoice.equals("scissors")){


            outcome = 1;


        }
        else if (computerChoice.equals("rock") && player.equals("scissors")){
            outcome = 2;

        }

        else if (player.equals("scissors") && computerChoice.equals("paper") ){

            outcome = 1;
        }

        else if (computerChoice.equals("scissors") && player.equals("paper")){

            outcome = 2;
        }

        else if (player.equals("rock") && computerChoice.equals("paper") ){

            outcome = 2;
        }

        else if (computerChoice.equals("rock") && player.equals("paper")){

            outcome = 1;
        }
        return outcome;

    }


    public static String computerChoose(){

        /*return "scissors";*/
        Random generator = new Random();
        String [] answer = new String [3];
        answer [0]= "paper";
        answer [1] = "rock";
        answer [2] = "scissors";
        return answer[generator.nextInt(3)];

    }

    public static void main(String[] args) {


        kbd = new Scanner(System.in);

        System.out.println("THE GAME OF PAPER, ROCK, SCISSORS:");

        System.out.print("\nDo you need instructions (Y or N)? ");

        String userPlay = kbd.nextLine();

        if (userPlay.equalsIgnoreCase("y")){
            instructions();
        }




        String answer;
        do{

            int result = playGame();

            System.out.println(result);
            switch (result){
            case 1: 
                System.out.println("YOU WIN!");
                break;
            case 2: 
                System.out.println("Comp WINs!");
                break;
            case 3: 
                System.out.println("IT'S A TIE!");
                break;
            default:
            }

            System.out.print("\nPlay again ( Y or N)? ");
            answer = kbd.nextLine();

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


    }


}   

2 个答案:

答案 0 :(得分:4)

您需要做的第一件事就是只调用computerChoose()一次。每次调用此方法时,它都会生成一个新的随机数,因此会产生不同的答案。您只应在playGame()内调用一次,并将其分配给本地变量。

E.g。

String computerChoice = computerChoose();

然后使用此变量名称替换您对computerChoose()的所有其他调用。这样,您将显示一个值,并仅比较逻辑中的一个值。

至于跟踪其他信息,例如游戏数量和获胜/失败的数量,请考虑声明更多的类变量(或主方法中的局部变量),然后您可以分配,增加和读取。您可以在main方法的do-while循环中完成所有这些操作。不需要任何额外的循环。

答案 1 :(得分:1)

除了Adam的答案之外,将末尾的do-while循环更改为以下内容将解决一些不同的问题。

String answer;
int winCount=0, lossCount=0, tieCount=0;
do{
    int result = playGame();

    switch (result){
    case 1: 
        System.out.println("YOU WIN!");
        winCount++;
        break;
    case 2: 
        System.out.println("Comp WINs!");
        lossCount++;
        break;
    case 3: 
        System.out.println("IT'S A TIE!");
        tieCount++;
        break;
    default:
    }

    System.out.print("\nPlay again ( Y or N)? ");
     answer = kbd.nextLine();

}while(answer.equalsIgnoreCase("y"));
System.out.printf("Wins: %d, Losses: %d, Total plays: %d%n", winCount, lossCount, winCount+lossCount+tieCount);

您需要在while循环中更新result,否则只有第一个游戏的结果才会准确。