我遇到的问题是“是/否”语句,如果我输入“否”,它将继续退出程序。请告诉我问题出在哪里?
导入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();
}
}
因为当用户输入“否”时,你只需打印一条消息,而不会真正告诉程序退出。
您可以通过许多不同的方式来调整它,例如将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();
}
首先,当您检查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”块。
你的逻辑现在似乎有点混乱。我建议你重新设计一下代码。你的问题在于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语句更改为