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

布尔值不会WHILE循环java编程

祁嘉木
2023-03-14

我遇到了一个我还没有遇到的问题。我用java写了一个猜谜游戏来猜1到1000之间的数字。程序应该循环,直到玩家决定不再玩为止。然而,我无法让它循环。如果我取出程序底部的Scanner类,它可以正常循环,但我需要Scanner类按照类中的要求完成程序。如果用户在scanner类中键入“no”,则while循环变量设置为false,程序将按其应该的方式终止。但是,如果用户选择“yes”并且while循环变量保持为true,则我无法使其循环。在输入“yes”后,程序只是暂停,什么也没有发生,并且程序没有结束。任何帮助都将不胜感激。

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;
   }

}

共有1个答案

公羊英达
2023-03-14

你可以去掉

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结构。“如果猜错了,告诉他们低一点或高一点,否则告诉他们他们赢了,并提出再玩一次”这才是游戏真正应该做的。

此外,正确的布尔值有点多余,因为要退出循环,correct必须为true,因此无需再次检查是否正确。

所以:

                  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.");

最后一件事你可能要考虑,这是所有偏好中最重要的一件事,那就是你可能想要以不同的方式检查是或否。通常,当我看到这些类型的检查时,我通常会看到人们抓取字符串响应的第一个字母,然后执行charAt(0),如果charAt(0)==“y”或charAt(0)==“y”,则再次播放,否则你会有一个no。如果你喜欢这种方法,请思考一下。

 类似资料:
  • 我对Java编码非常陌生,我已经研究这个问题大约4天了。我正在做一个选择你自己的结局故事。当我到达第69行时,如果读者选择是,我希望系统重新开始故事,如果他们选择否,则结束程序。我不确定我是否正确地编码了while循环,或者我甚至可以使用中断;操作员就像我在使用它一样。对不起,我的代码太难看了,哈哈,我正在努力变得更好。感谢您的建议! }

  • 主要内容:while 语句,do-while 语句,while和do-while的比较循环是程序中的重要流程结构之一。循环语句能够使程序代码重复执行,适用于需要重复一段代码直到满足特定条件为止的情况。 所有流行的编程语言中都有循环语句。 Java 中采用的循环语句与C语言中的循环语句相似,主要有 while、do-while 和 for。另外 Java 5 之后推出了 for-each 循环语句,for-each 循环是 for 循环的变形,它是专门为集合遍历而设计的。for-ea

  • 你已经初步了解C语言如何处理循环,但是你可能不是很清楚布尔表达式i < argc是什么。在学习while循环之前,让我先来对布尔表达式做一些解释。 在C语言中,实际上没有真正的“布尔”类型,而是用一个整数来代替,0代表false,其它值代表true。上一个练习中表达式i < argc实际上值为1或者0,并不像Python是显式的Ture或者False。这是C语言更接近计算机工作方式的另一个例子,因

  • 每次我输入东西时,这段代码都会循环。如何修复它? 这是整个事情的截图:

  • 问题内容: 我正在制作一个以这种方式执行的while循环程序: 主线程进入while循环。 在while循环中什么也没有发生。 线程将停留在while循环中,直到满足条件为止。 另一个线程运行一个满足上述条件的函数。 这是一个例子: 类中还有另一个函数会将路径设置为null,一旦发生这种情况,主线程应退出此循环。在另一个线程中调用另一个函数。 但是,即使将path设置为null,主线程也不会退出循

  • 我想写一个程序,把每4位数字的每一位相加。例如,我从1000开始,加上1001,千变成2,百变成0,十变成0,单位变成1。这将持续增加每个数字,直到达到9999。这是我的代码,它只输出9999。