嵌套while循环不会要求再次正确运行程序

问题描述 投票:1回答:2

好吧,我有这个hw问题,我必须只使用嵌套while循环没有做什么。所以基本上我有代码下来,但它不会运行部分循环,它一直说是或否。它假设是这样的

猜猜秘密号码。

输入密码的最大值:10

已选择一个新的密码。

输入猜测:3

太低;再试一次。

输入猜测:8

太低;再试一次。

输入猜测:9

太低;再试一次。

输入猜测:10

你赢了4个猜!

再玩一次? (是/否)y

已选择一个新的密码。

输入猜测:7

太高;再试一次。

输入猜测:3太低;再试一次。

输入猜测:5

你赢了3个猜!

再玩一次? (是/否)n

 public static void main(String arg[])
{
    int guess = 0,max,guesses = 0;
    String response;
    Scanner input= new Scanner(System.in);
    System.out.println("Guess the secret number\n");
    System.out.println("Enter maximum value for secret number: ");
    max=input.nextInt();
    int numbers=(int) (Math.random()* max) + 1;
    while(true) 
    {
        System.out.println("A new secret number has been chosen.");

        while (guess!=numbers)
        {
            System.out.println("Enter guess");
            guess=input.nextInt();
            guesses++;

            if (guess<numbers)
            {
                System.out.println("Two low; Try again ");
            }
            else if (guess>numbers)
            {
                System.out.println("To high; Try again");
            }

        }
        System.out.println("You won in " + guesses + "!"); 
        System.out.print("\nPlay again? (Y/N)"); 
        response = input.next(); 
        if(response.equalsIgnoreCase("y"))
        {
            continue; 
        }
        else
        {
            break;
        }

    }
    input.close();
}

(这是我得到的)

输入密码的最大值:5

已选择一个新的密码。

输入猜测4

高;再试一次

输入猜测3

你赢了2!

再玩一次? (Y / N)Y

已选择一个新的密码。

你赢了2!

再玩一次? (Y / N)Y

已选择一个新的密码。

你赢了2!

再玩一次? (Y / N)

(所以循环不会再次调用猜测)

java output nested-loops
2个回答
0
投票

您需要重新初始化猜测和数字才能开始新一轮游戏。

在外部while循环内向下移动这两行:

int numbers=(int) (Math.random()* max) + 1;
int guess = 0, guesses = 0;

0
投票

你很接近,但每次获胜后你需要重置你的重要值。你可以通过简单地将它们移动到你的外部循环循环中来做到这一点,这样每次内部循环中断时,它们会在每轮猜谜游戏之前重置为你想要它们的内容。看这里:

 public static void main(String arg[])
{
    Scanner input= new Scanner(System.in);

    while(true) 
    {
        int guess = 0,max,guesses = 0;
        String response;
        System.out.println("Guess the secret number\n");
        System.out.println("Enter maximum value for secret number: ");
        max=input.nextInt();
        int numbers=(int) (Math.random()* max) + 1;
        System.out.println("A new secret number has been choosen.");

        while (guess!=numbers)
        {
            System.out.println("Enter guess");
            guess=input.nextInt();
            guesses++;

            if (guess<numbers)
            {
                System.out.println("Two low; Try again ");
            }
            else if (guess>numbers)
            {
                System.out.println("To high; Try again");
            }

        }
        System.out.println("You won in " + guesses + "!"); 
        System.out.print("\nPlay again? (Y/N)"); 
        response = input.next(); 
        if(response.equalsIgnoreCase("y"))
        {
            continue; 
        }
        else
        {
            break;
        }

    }
    input.close();
}
© www.soinside.com 2019 - 2024. All rights reserved.