我必须为我的程序Fermi Pico Bagel(Bagel)运行编写一个类,但是我的游戏数计数器无法正常运行。当用户正确猜出了密码并被提示看是否愿意再次玩耍时,他们选择这样做,则完成的游戏仍然显示为零。请帮忙。谢谢!

Bagels类是我运行该类的对象(第一个打印在此处),而Player类是保存该玩家的统计信息的一个类。

import java.util.Scanner;

public class Bagels {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        String playAgain = "";
        int userGuess[];
        int numOfMoves = 0;
        int numOfGames = 0;

        System.out.println("Welcome to Pico, Fermi, Bagel! Good luck.");
        Player user = new Player();
        System.out.println("Enter the number of digits to use: ");
        int numDigits = keyboard.nextInt();

        if (playAgain.equalsIgnoreCase("r") || (user.getGamesCompleted() == 0) ) {
            System.out.println();
            System.out.println("Enter the player's name: ");
            String playerName = keyboard.next();
            System.out.println();
            user.setName(playerName);
            numOfGames++;
        }

        do {

            if (playAgain.equalsIgnoreCase("p") || (user.getGamesCompleted() >= 1)) {
            System.out.println("Enter the number of digits to use: ");
            numDigits = keyboard.nextInt();

            }
            System.out
                    .println("Starting game #" + (user.getGamesCompleted()) + 1);
            boolean isCorrect;

            Engine e = new Engine();
            e.setNumDigits(numDigits);
            e.generateNewSecret();

            int[] secretNumber = e.getSecretNumber();

            for (int i = 0; i < secretNumber.length; i++) {
                System.out.println(secretNumber[i]);

            }

            do {
                numOfMoves = 0;
                String guess = user.askForGuess();
                userGuess = e.convertNumToDigitArray(guess);
                Validator check = new Validator();
                numOfMoves++;
                isCorrect = check.validateGuess(secretNumber, userGuess,
                        numDigits);

                if (isCorrect == true) {
                    System.out.println("Congratulations! You won in "
                            + numOfMoves + " moves");
                }
                    user.updateStats(numOfMoves);
                    System.out.println("Statistics for " + user.getName());
                    System.out.println("Games completed: "
                            + user.getGamesCompleted());
                    System.out.println("Number of digits: " + e.getNumDigits());
                    System.out.println("Fastest win: " + user.getFastestWin()
                            + " guesses");
                    System.out.println("p - Play again");
                    System.out.println("r - Reset game");
                    System.out.println("q - Quit");
                    System.out.println("What would you like to do?");
                    playAgain = keyboard.next();

                    if (playAgain.equals("r")) {
                        break;
                    }
                    if (playAgain.equals("q")) {
                        System.exit(0);
                    }
                    if (playAgain.equals("p")) {
                        numOfGames++;
                        break;
                    }

            } while (isCorrect == false);
        } while (playAgain.equals("p") || playAgain.equals("r"));

    }
}




public class Player {

    private String name;
    private int fastestWin;
    private int gamesCompleted;
    private Scanner keyboard = new Scanner(System.in);

    // take the user's guess
    public String askForGuess() {
        System.out.println("Please enter your guess: ");
        String guess = keyboard.next();
        return guess;
    }

    // returns the name
    public String getName() {
        return this.name;
    }

    // returns the quickest amount of guesses the player has won in
    public int getFastestWin() {
        return this.fastestWin;
    }

    // returns how many games the user has won/played
    public int getGamesCompleted() {
        return this.gamesCompleted;
    }

    // sets the name
    public void setName(String name) {
        this.name = name;
    }

    // updates the fastest win (if the amount of turns has decreased
    // and increases the number of games completed
    public void updateStats(int numberOfMovesTakenToWin) {
        if (this.gamesCompleted == 1) {
            this.fastestWin = numberOfMovesTakenToWin;
        } else {
            if (this.fastestWin > numberOfMovesTakenToWin) {
                this.fastestWin = numberOfMovesTakenToWin;
            }
        }

    }

}

最佳答案

属性gamesCompleted属于Player对象。当用户选择再次播放时,您可以执行以下操作:

numOfGames++;


但这会增加与numOfGames不相关的局部变量gamesCompleted。如果搜索使用gamesCompleted的位置,将会看到您永远不会更改其值。

您可以编写一种方法来增加该用户完成的游戏数量。并调用它而不是执行numOfGames++

就像是:

public void incrementGamesCompleted() {
    this.gamesCompleted++;
}

09-11 17:17