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

时间:2019-04-05 00:49:33

标签: java output nested-loops

嗯,我有一个硬件问题,我只需要使用嵌套的while循环就根本不使用whiles,所以基本上我的代码已经写完了,但是它并不会运行循环的一部分,所以总是说是或否。它应该像这样

猜密码。

输入密码的最大值: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

已选择一个新的密码。

您赢了2!

再次播放? (是/否)y

已选择一个新的密码。

您赢了2!

再次播放? (是/否)

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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();
}