Вложенный цикл while не будет запрашивать корректный запуск программы - PullRequest
1 голос
/ 05 апреля 2019

Что ж, у меня есть проблема с 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

Был выбран новый секретный номер.

Вы выиграли за 2!

Играть снова?(Да / Нет) y

Был выбран новый секретный номер.

Вы выиграли за 2!

Играть снова?(Да / Нет)

(поэтому цикл не будет вызывать, чтобы угадать снова)

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Вы близки, но вам нужно сбрасывать важные значения после каждого выигрыша.Вы можете сделать это, просто переместив их в свой внешний гнездовой цикл так, чтобы каждый раз, когда внутренний цикл прерывался, они возвращались к тому, что вы хотите, чтобы они были перед каждым раундом игры на угадывание.Смотрите здесь:

 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();
}
0 голосов
/ 05 апреля 2019

Вам нужно повторно инициализировать догадаться и числа , чтобы начать новый раунд игры.

Переместите эти две строки вниз, внутри внешнего , в то время как loop:

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