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