[英]boolean value will not WHILE loop java programming
我遇到了一个我还没有遇到的问题。 我用 java 编写了一个猜谜游戏来猜一个 1 到 1000 之间的数字。程序应该循环直到玩家决定他或她不再想玩。 但是,我无法让它循环。 如果我取出程序底部的 Scanner 类,它会很好地循环,但我需要扫描器类来完成我班上要求的程序。 如果用户在扫描器类中键入“no”,while 循环变量将设置为 false,程序将按原样终止。 但是如果用户选择“是”并且 while 循环变量保持为真,我就无法让它循环。 输入“是”后,程序只是暂停,什么也没有发生,程序并没有结束。 任何帮助将不胜感激。
import javax.swing.*;
import java.util.*;
public class RandomGuess3
{
public static void main(String[] args)
{
String userGuess;
String playAgain;
int guessNum;
int randomNum = (1+(int)(Math.random()*1000));
int guessCount = 0;
boolean correct = false;
boolean startGame = true;
boolean newGame = false;
if(launchGame() == true)
startGame = true;
while(startGame == true)
{
do
{
userGuess = JOptionPane.showInputDialog(null,
"I'm thinking of a number between 1 and 1000."
+"\nEnter your guess:", "Guessing Game",
JOptionPane.QUESTION_MESSAGE);
guessNum = Integer.parseInt(userGuess);
if(guessNum != randomNum)
if(guessNum < randomNum)
JOptionPane.showMessageDialog(null, "Sorry you guessed too low");
else
JOptionPane.showMessageDialog(null, "Sorry you guessed too high");
if(guessNum == randomNum)
correct = true;
++guessCount;
}while(guessNum != randomNum);
if(correct == true)
JOptionPane.showMessageDialog(null, "CONGRATULATIONS!"
+"\nYou guessed correctly!"
+"\nAnd it only took "+guessCount+" tries.");
Scanner input = new Scanner(System.in);
System.out.print("Want to play again? Enter yes or no >> ");
playAgain = input.nextLine().toUpperCase();
if(playAgain.equals("NO"))
startGame = false;
else
startGame = true;
}
}
public static boolean launchGame()
{
int letsPlay;
boolean startGame;
letsPlay = JOptionPane.showConfirmDialog(null,
"Want to play a guessing game?");
startGame = (letsPlay == JOptionPane.YES_OPTION);
System.out.println("startGame is "+startGame);
return startGame;
}
}
你可以取出
if(launchGame() == true)
startGame = true;
完全,也许使用这个:
boolean startGame = launchGame();
while(startGame)
{
do
{
userGuess = JOptionPane.showInputDialog(null,
"I'm thinking of a number between 1 and 1000."
+"\nEnter your guess:", "Guessing Game",
JOptionPane.QUESTION_MESSAGE);
guessNum = Integer.parseInt(userGuess);
另一个潜在的结构改进可能是使用游戏的自然 if else 结构。 “如果猜错了,告诉他们更低或更高,否则告诉他们他们赢了并提供再次玩”似乎游戏应该做的事情。
此外,您的正确布尔值有点多余,因为要退出循环,正确必须为真,因此您无需再次检查是否正确。
所以:
if(guessNum < randomNum)
JOptionPane.showMessageDialog(null, "Sorry you guessed too low");
else
JOptionPane.showMessageDialog(null, "Sorry you guessed too high");
++guessCount;
}while(guessNum != randomNum);
JOptionPane.showMessageDialog(null, "CONGRATULATIONS!"
+"\nYou guessed correctly!"
+"\nAnd it only took "+guessCount+" tries.");
您可能要考虑的最后一件事,这是最基于偏好的,您可能想以不同的方式检查是或否。 通常当我看到这些类型的检查时,我通常会看到人们抓取 String 响应的第一个字母,然后执行 charAt(0),如果 charAt(0) == 'y' 或 charAt(0) == 'Y ',然后再玩一次,否则你就没有。 如果您更喜欢这种方法,请深思熟虑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.