当前位置: 首页 > 知识库问答 >
问题:

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

丁毅庵
2023-03-14

我遇到的问题是“是/否”语句,如果我输入“否”,它将继续退出程序。请告诉我问题出在哪里?

导入java。util。随机的导入java。util。扫描仪;

公共类NumberGame{private static final int DO_NOT_PLAY_reach=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();
}

}

public class MainApp {
public static void main(String[] args) {
    new NumberGame().run();
}
}

共有3个答案

姜增
2023-03-14

因为当用户输入“否”时,你只需打印一条消息,而不会真正告诉程序退出。

您可以通过许多不同的方式来调整它,例如将get答案方法更改为:

    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();
    }
王凌
2023-03-14

首先,当您检查m答案是否等于“否”时,您只打印一个字符串,并且总是执行“再见”,因为您缺少大括号。应该是:

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,这正是我前面指出的大括号中的值。如果选择此选项,则应将“执行while”块更改为“常规while”块。

蓬森
2023-03-14

你的逻辑现在似乎有点混乱。我建议你重新设计一下代码。你的问题在于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;
}

run()中使用此结果检查是否应该启动游戏:

public void run()
{
    displayWelcomeMessage();
    getUserName();
    greetUser();

    if(getAnswer()) //User wants to play!
    {
        do
        {
            intNumberGuessGame();
        } while (mPlayAgainInput != DO_NOT_PLAY_AGAIN);

        sayGoodbye();
    }
}
 类似资料:
  • 问题内容: 我有一个安排计时器的游戏。我有这个CoresManager文件: 我在游戏中使用这个: 如果播放器注销并且服务器重新启动,CoresManager计时器将停止运行。为了使其再次运行,我添加了代码以使其在您再次登录后再次执行startTimer()。但是,由于如果服务器未注销,计时器仍在运行,因此计时器开始运行两次。根据您注销和登录的次数,计时器开始减去2或更多。我认为,如果有代码确定计

  • 在最近的一个相关问题中,我发现以下代码 存在编译器错误,x不是init。(初始化)。令我惊讶的是,编译器无法推理init。尤其是因为这段代码似乎不需要任何运行时推理,如下所示: 在指示的第2行,被设置为。 第2行和第3行之间没有代码。 所以到达第3行,必然是所以init是不可避免的。 我不知道这是否正确。我隐约记得,编译器优化可以改变语句的执行顺序。这在这里起作用了吗?有没有可能在3号线和4号线之

  • 问题内容: 我注意到1.如果仅打印退格键,即Python中的\ b序列,则它完全空白。2.如果我打印字符后跟退格键,例如’sssss \ b \ b \ b \ b \ b’,那么它将打印多个’s’字符,但是如果我打印类似’sssss \ b \ b \ b \ b \ baaaa ‘,则退格\ b实际上会像我在键入退格并删除’s’字符一样。 我在Windows XP上使用Python 2.6。这

  • 问题内容: 我正在研究一个小型django项目,该项目稍后将部署在servlet容器中。但是,如果我使用cPython而不是Jython,开发速度会更快。因此,我想做的是测试我的代码是否在settiings.py中的cPython或Jython上运行,以便我可以告诉它使用适当的数据库驱动程序(postgresql_psycopg2或doj.backends.zxjdbc.postgresql)。有

  • 错误:在类com.complete.reference.shift中找不到Main方法,请将Main方法定义为:public static void Main(String[]args)或JavaFX应用程序类必须扩展JavaFX.application.application

  • 我在java代码中使用有组织的BST。这个函数/方法应该搜索树中具有特定值的节点,并让用户知道它是否存在。 问题在于结尾的else语句。我的编译器说,else语句中的任何内容都是死代码,这意味着它没有被使用。但是,如果函数确实遇到null并且无法找到具有指定值的节点,我需要else语句中的代码。如果我将第二条else语句更改为