Java 在我下面的代码中,是/否语句运行不正常,

Java 在我下面的代码中,是/否语句运行不正常,,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

我遇到的问题是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 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格泽耶克