簡體   English   中英

如何解決 Java 猜謎游戲中的不一致問題

[英]How to fix inconsistencies in Java Guessing Game

我又來了。 我已經聽取了之前的所有建議,但因為我的課程沒有教我有關方法的知識,所以我對使用這些建議持謹慎態度。 該程序應提示用戶輸入一個數字和最大猜測次數,生成一個隨機數,讓用戶窮盡所有猜測或猜出正確的數字,然后詢問用戶是否要再次玩。 我注意到三個錯誤,如果您能幫助確定他們的解決方案,我將非常感激:

  1. 如果我在猜測中輸入兩次負數不會產生任何結果(我假設運行時錯誤),如果我在猜測中輸入 0 兩次也是如此。
  2. 第二輪游戲結束后,它不會詢問用戶是否願意再次玩。
  3. 當最大猜測數大於可能的數字總數時識別時不一致。 即如果我輸入 1 猜測和 1 上限,這不應該顯示我應該“挑戰”自己的消息,因為 0 和 1 是正在生成的兩個可能的數字,大於 1,因為 2 但它仍然顯示.
import java.util.Scanner;
import java.util.Random;

public class MyClass {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        System.out.println("Hello! Here are the rules for this game:");

        System.out.println("1. You choose the limit of the secret number!");

        System.out.println("2. I generate the secret number!");

        System.out.println("3. You choose the maximum number of guesses!");

        System.out
                .println("4. You try to guess the secret number I generated within the number of guesses you entered!");

        System.out.println("5. You may win a prize!");

        System.out.println(
                "With that being said, would you like to play? If yes please enter true, if not please enter false.");

        boolean wantToPlay = input.nextBoolean();

        while (wantToPlay != true) {
            System.out.println("Thank you and remember to wash your hands! You may close me.");

            System.out.println(
                    "Did you accidentally press false? If yes please enter true, if not you may leave the program. ");

            wantToPlay = input.nextBoolean();

        }

        System.out.println(
                "Please enter the limit of the secret number. Please note it must be a greater than 0 positive integer.");

        System.out.println("Please note that your secret number will be between zero and the number you just entered.");

        int upperBound = input.nextInt();

        System.out.println("The upper bound you entered is" + " " + upperBound + "." + " "
                + "Is that correct? If yes please enter true, if not please enter false.");

        boolean yesOrNo = input.nextBoolean();

        if (upperBound <= 0) {
            yesOrNo = false;
        }

        while (yesOrNo != true) {
            System.out.println(
                    "Please enter the new upper bound of the secret number. Remember it must be a greater than 0 positive integer.");

            upperBound = input.nextInt();

            System.out.println("The upper bound you entered is" + " " + upperBound + "." + " "
                    + "Is that correct? If yes please enter true, if not please enter false. ");

            yesOrNo = input.nextBoolean();

            if (upperBound <= 0) {
                yesOrNo = false;
            }
        }

        int secretNumber = (int) (Math.random() * upperBound);

        System.out.println(
                "Please enter the maximum number of guesses. Please note it must be a greater than 0 positive integer.");

        int numberOfGuesses = input.nextInt();

        if (numberOfGuesses >= ++secretNumber) {
            System.out.println(
                    "Please note that the number of guesses you entered is equal or greater than the possible number of values for the secret number.");

            System.out.println("If you would like more of a challenge please re-enter the number of guesses below.");
        }

        System.out.println("The number of guesses you entered is" + " " + numberOfGuesses + "." + " "
                + "Is that correct? If yes please enter true, if not please enter false.");

        boolean yesOrNo2 = input.nextBoolean();

        if (numberOfGuesses <= 0) {
            yesOrNo2 = false;
        }

        while (yesOrNo2 != true) {
            System.out.println(
                    "Please enter the new number of guesses. Remember it must be a greater than 0 positive integer.");

            numberOfGuesses = input.nextInt();

            if (numberOfGuesses >= ++secretNumber) {
                System.out.println(
                        "Please note that the number of guesses you entered is equal or greater than the possible number of values for the secret number.");

                System.out
                        .println("If you would like more of a challenge please re-enter the number of guesses below.");

                System.out.println(
                        "If not you can still continue with your previous number as long as you re-enter it below.");

            }

            numberOfGuesses = input.nextInt();

            System.out.println("The number of guesses you entered is" + " " + numberOfGuesses + "." + " "
                    + "Is that correct? If yes please enter true, if not please enter false. ");

            yesOrNo2 = input.nextBoolean();

            if (numberOfGuesses <= 0) {
                yesOrNo2 = false;
            }

        }

        boolean loop = false;

        for (int i = 0; i < numberOfGuesses; ++i) {
            System.out.println("Please enter your guess.");

            int guesses = input.nextInt();

            if (guesses > secretNumber) {
                System.out.println("Your guess is too high.");
            }

            if (guesses < secretNumber) {
                System.out.println("Your guess is too low.");
            }

            if (guesses == secretNumber) {
                System.out.println("Your guess is correct.");

                System.out.println("Congragulations you won the game.");

                loop = true;

                break;
            }
        }

        if (loop == false) {
            System.out.println("Sorry you lost the game.");

            System.out.println(
                    "Would you like to see the secret number? If so please enter true, if not please enter false");

            boolean seeSecretNumber = input.nextBoolean();

            if (seeSecretNumber == true) {
                System.out.println("The secret number was " + secretNumber);
            }
        }

        System.out.println("Would you like to play again? If so, please enter true, if not you may enter no.");

        boolean playAgain = input.nextBoolean();

        while (playAgain == true) {
            System.out.println(
                    "Please enter the limit of the secret number. Please note it must be a greater than 0 positive integer.");

            System.out.println(
                    "Please note that your secret number will be between zero and the number you just entered.");

            upperBound = input.nextInt();

            System.out.println("The upper bound you entered is" + " " + upperBound + "." + " "
                    + "Is that correct? If yes please enter true, if not please enter false.");

            yesOrNo = input.nextBoolean();

            if (upperBound <= 0) {
                yesOrNo = false;
            }

            while (yesOrNo != true) {
                System.out.println(
                        "Please enter the new upper bound of the secret number. Remember it must be a greater than 0 positive integer.");

                upperBound = input.nextInt();

                System.out.println("The upper bound you entered is" + " " + upperBound + "." + " "
                        + "Is that correct? If yes please enter true, if not please enter false. ");

                yesOrNo = input.nextBoolean();

                if (upperBound <= 0) {
                    yesOrNo = false;
                }
            }

            secretNumber = (int) (Math.random() * upperBound);

            System.out.println(
                    "Please enter the maximum number of guesses. Please note it must be a greater than 0 positive integer.");

            numberOfGuesses = input.nextInt();

            if (numberOfGuesses >= ++secretNumber) {
                System.out.println(
                        "Please note that the number of guesses you entered is equal or greater than the possible number of values for the secret number.");

                System.out
                        .println("If you would like more of a challenge please re-enter the number of guesses below.");
            }

            System.out.println("The number of guesses you entered is" + " " + numberOfGuesses + "." + " "
                    + "Is that correct? If yes please enter true, if not please enter false.");

            yesOrNo2 = input.nextBoolean();

            if (numberOfGuesses <= 0) {
                yesOrNo2 = false;
            }

            while (yesOrNo2 != true) {
                System.out.println(
                        "Please enter the new number of guesses. Remember it must be a greater than 0 positive integer.");

                numberOfGuesses = input.nextInt();

                if (numberOfGuesses >= ++secretNumber) {
                    System.out.println(
                            "Please note that the number of guesses you entered is equal or greater than the possible number of values for the secret number.");

                    System.out.println(
                            "If you would like more of a challenge please re-enter the number of guesses below.");

                    System.out.println(
                            "If not you can still continue with your previous number as long as you re-enter it below.");

                }

                numberOfGuesses = input.nextInt();

                System.out.println("The number of guesses you entered is" + " " + numberOfGuesses + "." + " "
                        + "Is that correct? If yes please enter true, if not please enter false. ");

                yesOrNo2 = input.nextBoolean();

                if (numberOfGuesses <= 0) {
                    yesOrNo2 = false;
                }

            }

            loop = false;

            for (int i = 0; i < numberOfGuesses; ++i) {
                System.out.println("Please enter your guess.");

                int guesses = input.nextInt();

                if (guesses > secretNumber) {
                    System.out.println("Your guess is too high.");
                }

                if (guesses < secretNumber) {
                    System.out.println("Your guess is too low.");
                }

                if (guesses == secretNumber) {
                    System.out.println("Your guess is correct.");

                    System.out.println("Congragulations you won the game.");

                    loop = true;

                    break;
                }
            }

            if (loop == false) {
                System.out.println("Sorry you lost the game.");

                System.out.println(
                        "Would you like to see the secret number? If so please enter true, if not please enter false");

                boolean seeSecretNumber = input.nextBoolean();

                if (seeSecretNumber == true) {
                    System.out.println("The secret number was " + secretNumber);

                    break;
                }
            }

        }

        System.out.println("Would you like to play again? If so please enter true, if not please enter false.");

        playAgain = input.nextBoolean();

        if (playAgain == false) {
            System.out.println("Thank you for playing, have a good day and wash your hands!");
        }
    }
}

方法和函數是你的朋友。 我強烈建議您開始了解它們。 它們將減少您編寫的代碼量並使其更易於閱讀。 快速搜索 duckduckgo.com“java 方法”將帶您到 Tutorialspoint 和 W3Schools 頁面。

我建議在您的 IDE(例如 Netbeans、Eclipse)上使用(或學習)調試器。 您會發現它使故障查找變得容易了數百倍。

處理用戶輸入的第一條規則:不允許用戶輸入。

處理用戶輸入的其他一般規則:用戶不閱讀說明,用戶會按照您的說明做相反的事情,用戶會嘗試對您的程序做您從未想過的事情,盡可能限制所有用戶輸入,驗證每個用戶每次輸入。

這些是針對您的錯誤的可能解決方案。

錯誤 1。用戶輸入驗證將解決此問題 - 不需要負數。

錯誤 2。將游戲代碼放入游戲 while 循環while(continueGame)將解決此問題。 您從 boolean continueGame = true 開始。 在游戲結束時,你會問“你想再玩一次嗎?” 是 = 真,否 = 假。 循環是否會再次運行取決於答案。

錯誤3. if (numberOfGuesses >= ++secretNumber)改為if(numberOfGuessess > secretNumber)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM