Java 为什么我的do while循环不起作用?

Java 为什么我的do while循环不起作用?,java,Java,当我编译时,尝试输入(y)来再次播放我的do-while不起作用,它将我带出循环。 导入java.util.Scanner public class HiLo { public static void main(String[] args) { // Creating a play again variable String playAgain = ""; // Create Scanner object Scanner

当我编译时,尝试输入(y)来再次播放我的do-while不起作用,它将我带出循环。 导入java.util.Scanner

public class HiLo {

    public static void main(String[] args) {
        // Creating a play again variable
        String playAgain = "";
        // Create Scanner object
        Scanner scan = new Scanner(System.in);
        // Create a random number for the user to guess
        int theNumber = (int)(Math.random() * 100 + 1);
        int guessNumber = 0;
        do
        {
            System.out.println("Guess a number between 1 - 100: ");
            while (guessNumber != theNumber) 
            {
                guessNumber = scan.nextInt();
                if (guessNumber > theNumber)
                {
                    System.out.println("Sorry, try again too high!");
                }
                else if (guessNumber < theNumber)
                {
                    System.out.println("Sorry, try again too low!");
                }
                else
                {
                    System.out.println("Congrats, you got it!");
                }
            }
            System.out.println("Would you like to play again (y/n)?");
            playAgain = scan.next();
        } while (playAgain.equalsIgnoreCase("y"));
        System.out.println("Thank you for playing! Goodbye.");
        scan.close();
    }

}
公共类HiLo{
公共静态void main(字符串[]args){
//再次创建play变量
字符串“”再次播放;
//创建扫描仪对象
扫描仪扫描=新扫描仪(System.in);
//创建一个随机数供用户猜测
int theNumber=(int)(Math.random()*100+1);
整数=0;
做
{
System.out.println(“猜一个介于1-100之间的数字:”);
while(猜数!=数字)
{
guessNumber=scan.nextInt();
如果(猜测数字>数字)
{
System.out.println(“对不起,再试一次太高了!”);
}
else if(猜测数<数字)
{
System.out.println(“对不起,再试一次太低了!”);
}
其他的
{
System.out.println(“恭喜,你成功了!”);
}
}
System.out.println(“您想再次播放吗(y/n)”;
playreach=scan.next();
}while(playreach.equalsIgnoreCase(“y”));
System.out.println(“谢谢你玩!再见”);
scan.close();
}
}
如下更改代码:(只需更新循环中的变量)

publicstaticvoidmain(字符串[]args){
//再次创建play变量
字符串“”再次播放;
//创建扫描仪对象
扫描仪扫描=新扫描仪(System.in);
//创建一个随机数供用户猜测
整数=0;
整数=0;
做
{
//要添加的新行
数字=(int)(Math.random()*100+1);
猜数=0;
System.out.println(“猜一个介于1-100之间的数字:”);
while(猜数!=数字)
{
guessNumber=scan.nextInt();
如果(猜测数字>数字)
{
System.out.println(“对不起,再试一次太高了!”);
}
else if(猜测数<数字)
{
System.out.println(“对不起,再试一次太低了!”);
}
其他的
{
System.out.println(“恭喜,你成功了!”);
}
}
System.out.println(“您想再次播放吗(y/n)”;
playreach=scan.next();
}while(playreach.equalsIgnoreCase(“y”));
System.out.println(“谢谢你玩!再见”);
scan.close();
}
以下是在Jshell上执行的代码:


程序无法运行的原因是do while循环在到达“while”部分之前进行了一次迭代。在您的例子中,在用户正确猜测数字后,程序将成功完成循环。您的程序中断,因为在此之后,您要求用户输入“y”以无休止地继续,而不让他们猜数字。如果他们猜到一个数字,程序就会终止

当您键入
y
再次播放,并且
do
循环重新开始后,
guessNumber
theNumber
的值是多少?他们还平等吗?如果是这样的话,为什么它不立即跳过循环呢?而且,如果你最终再次玩,那么猜测的随机数不应该是。。。。不同?您能提供在您的控制台中输入和输出的数据吗?
public static void main(String[] args) {
    // Creating a play again variable
    String playAgain = "";
    // Create Scanner object
    Scanner scan = new Scanner(System.in);
    // Create a random number for the user to guess
    int theNumber = 0;
    int guessNumber = 0;
    do
    {
    // new lines to be added
    theNumber = (int)(Math.random() * 100 + 1);
    guessNumber = 0;
        System.out.println("Guess a number between 1 - 100: ");
        while (guessNumber != theNumber) 
        {
            guessNumber = scan.nextInt();
            if (guessNumber > theNumber)
            {
                System.out.println("Sorry, try again too high!");
            }
            else if (guessNumber < theNumber)
            {
                System.out.println("Sorry, try again too low!");
            }
            else
            {
                System.out.println("Congrats, you got it!");
            }
        }
        System.out.println("Would you like to play again (y/n)?");
        playAgain = scan.next();
    } while (playAgain.equalsIgnoreCase("y"));
    System.out.println("Thank you for playing! Goodbye.");
    scan.close();
}