为什么Player.gamesCompleted属性从未更新



我必须为我的程序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++;

但这会增加与gamesCompleted无关的局部变量numOfGames。如果你搜索你使用gamesCompleted的地方,你会发现你永远不会改变它的值。

您可以编写一个方法来增加该用户完成的游戏数量。并称之为numOfGames++

类似于:

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

最新更新