Java 在我下面的代码中,是/否语句运行不正常,
我遇到的问题是yes/no语句,如果我输入no,它将继续退出程序。 请告诉我问题出在哪里 导入java.util.Random; 导入java.util.Scanner 公共类号码表{ 私有静态最终整数不再次播放=0Java 在我下面的代码中,是/否语句运行不正常,,java,Java,我遇到的问题是yes/no语句,如果我输入no,它将继续退出程序。 请告诉我问题出在哪里 导入java.util.Random; 导入java.util.Scanner 公共类号码表{ 私有静态最终整数不再次播放=0 private final Scanner mScanner; private final Random mRandom; private String mUserName; private int mCorrectAnswer; private int mPlayAgainInp
private final Scanner mScanner;
private final Random mRandom;
private String mUserName;
private int mCorrectAnswer;
private int mPlayAgainInput;
private String mAnswer;
public NumberGame() {
mScanner = new Scanner(System.in);
mRandom = new Random();
}
public void run() {
displayWelcomeMessage();
getUserName();
greetUser();
getAnswer();
do {
intNumberGuessGame();
} while (mPlayAgainInput != DO_NOT_PLAY_AGAIN);
sayGoodbye();
}
private void getAnswer(){
System.out.println("Would you lioke to play a game enter yes to play or no to exit a game");
mAnswer = mScanner.nextLine();
if (mAnswer.equals("no"))
System.out.println("Maybe next time");
sayGoodbye();
}
private void displayWelcomeMessage() {
System.out.println("Welcome to the game!");
System.out.println("To play this game you have to"
+ " guess a number and enter upon prompt or you can"
+ " enter 0 to quit the game.");
}
private void getUserName() {
System.out.println("Enter your user name: ");
mUserName = mScanner.nextLine();
}
private void greetUser() {
System.out.println("Let's play a game, " + mUserName + ".");
}
private void sayGoodbye() {
System.out.println("Thanks for playing, " + mUserName + "!");
}
private void intNumberGuessGame() {
// Get a random number between 1 - 100
Random generator = new Random();
mCorrectAnswer = mRandom.nextInt(100) + 1;
int theirGuess = 0;
int howManyTries = 0;
while (theirGuess != mCorrectAnswer) {
System.out.println("Guess my number: ");
theirGuess = mScanner.nextInt();
mCorrectAnswer = mRandom.nextInt(101) + 1;
howManyTries++;
System.out.println("Correct answer = " + mCorrectAnswer);
if (theirGuess == mCorrectAnswer) {
System.out.println("You guessed it! It only took you "
+ howManyTries + " tries to get it right!");
promptToPlayAgain();
// They won the game, exit current loop
break;
} else if (theirGuess > mCorrectAnswer) {
System.out.println("Your answer is too high.");
} else if (theirGuess < mCorrectAnswer) {
System.out.println("Your answer is too low.");
}
}
}
private void promptToPlayAgain() {
System.out.println("Do you want to play again? (0 to quit): ");
mPlayAgainInput = mScanner.nextInt();
}
首先,当您检查mAnswer是否等于no时,您只打印一个字符串,并且您总是执行saybooth,因为您缺少大括号。它应该是:
if (mAnswer.equals("no")) {
System.out.println("Maybe next time");
sayGoodbye();
}
第二,如果你想用“是/否”问题来决定是否继续比赛,你需要检查
do {
intNumberGuessGame();
} while (mPlayAgainInput != DO_NOT_PLAY_AGAIN || !mAnswer.equals("no"));
或者在getAnswer函数中将mPlayAgainInput值设置为0,正好在我前面指出的大括号中。如果选择此选项,则应将do while block更改为常规while block。因为当用户输入no时,您只需打印一条消息,而不会实际告诉程序退出 您可以通过多种不同的方式进行调整,例如将getAnswer方法更改为:
private int getAnswer() {
System.out.println("Would you like to play a game? Enter yes to play or no to exit a game");
mAnswer = mScanner.nextLine();
if (mAnswer.equals("no")) {
System.out.println("Maybe next time");
return DO_NOT_PLAY_AGAIN;
} else {
return 1;
}
}
public void run() {
displayWelcomeMessage();
getUserName();
greetUser();
mPlayAgainInput = getAnswer();
while (mPlayAgainInput != DO_NOT_PLAY_AGAIN) {
intNumberGuessGame();
}
sayGoodbye();
}
以及您的跑步方法:
private int getAnswer() {
System.out.println("Would you like to play a game? Enter yes to play or no to exit a game");
mAnswer = mScanner.nextLine();
if (mAnswer.equals("no")) {
System.out.println("Maybe next time");
return DO_NOT_PLAY_AGAIN;
} else {
return 1;
}
}
public void run() {
displayWelcomeMessage();
getUserName();
greetUser();
mPlayAgainInput = getAnswer();
while (mPlayAgainInput != DO_NOT_PLAY_AGAIN) {
intNumberGuessGame();
}
sayGoodbye();
}
您的逻辑现在似乎有点混乱。我建议您重新设计一点代码。您的问题在于getAnswer函数是如何设计的-它提示输入答案,但不使用它。请更改此函数,以便它可以返回布尔值:
private boolean getAnswer()
{
System.out.println("Would you lioke to play a game enter yes to play or no to exit a game");
mAnswer = mScanner.nextLine();
if (mAnswer.equals("no"))
{
System.out.println("Maybe next time");
sayGoodbye();
return false;
}
return true;
}
在运行中使用此结果检查是否应启动游戏:
public void run()
{
displayWelcomeMessage();
getUserName();
greetUser();
if(getAnswer()) //User wants to play!
{
do
{
intNumberGuessGame();
} while (mPlayAgainInput != DO_NOT_PLAY_AGAIN);
sayGoodbye();
}
}
根据mPlayAgainInput=mScanner.nextInt;,您的哨兵为零。为什么您认为如果它扫描为否,它将退出游戏?这是我遇到问题的一部分,private void getAnswer{System.out.println您想玩游戏吗输入yes玩游戏或no退出游戏;mAnswer=mScanner.nextLine;如果mAnswer.equalsno System.out.println可能下次;说再见;}非常感谢伊瓦伊洛·托斯科夫。@DKCroat不要在有人帮助你后就离开。通过投票和接受最好的答案来表达感谢。我当然会选择@BLaZuRE。我很抱歉这是我第一次使用这个网站。谢谢你的意见:谢谢大家对我的问题给予我的意见。谢谢@Mateus格泽耶克