Почему оператор while не работает через некоторое время? - PullRequest
0 голосов
/ 23 февраля 2020

Я запутался в работе порядка делать время и время. Мой начальный вопрос - попросить пользователя написать число. Если число больше 7, оно должно отображать это число и вести обратный отсчет до 0. Я все еще учусь, но сейчас я застрял на этом, поэтому было бы здорово, если бы кто-то мог объяснить, как это работает и логика за этим!

Теперь у меня есть:

int num = 0;
        int b = 0;
        do{

            System.out.println("Por favor introduce un numero:");
            num = Integer.parseInt(br.readLine());

            if(num > 7){
                System.out.println("Tu numero es mayor a 7");

            }else if (num <= 7) {
                System.out.println("Tu numero es menor o igual a 7");
            }

          }while(num < 7);

            while(num < 7){
                 System.out.println(num);
                 num++;
            }

Я понимаю, что это не сработает из-за того, что оператор является fullfilt, когда вы выбираете число выше 7, и оно просто возвращает "Ту цифру мэра 7". НО я узнал, что если я использую другое До, пока он работает и ведет обратный отсчет до 0 (см. Ниже):

int num = 0;
        int b = 0;
        do{

            System.out.println("Por favor introduce un numero:");
            num = Integer.parseInt(br.readLine());

            if(num > 7){
                System.out.println("Tu numero es mayor a 7");

            }else if (num <= 7) {
                System.out.println("Tu numero es menor o igual a 7");
            }



        }while(num < 7);

        do{
        System.out.println(num);
        num--; }
        while(b<=num);

    }          

}

С другим До, пока он покажет мне отсчет до 0, я понимаю, в некотором смысле что int num получил значение ввода пользователя, но почему это не работает с оператором while? Могу ли я включить заявление while в Do While? Я также пытался поместить его в оператор Do While, но он полностью игнорируется ??

1 Ответ

0 голосов
/ 23 февраля 2020

Cycle do while выполняет проверку в конце, что означает, что тело цикла всегда выполняется хотя бы один раз. Но для цикла while условие проверяется в начале, поэтому тело выполняется новее, если условие не выполняется с самого начала.

Вы можете лучше понять свою ситуацию, если используете отладку, но вкратце:

  1. Первый цикл выполняется, пока выполняется условие. Таким образом, вы выходите из цикла, когда num < 7 возвращает false. Таким образом, вы выходите, когда оно 7, 8 или выше.
  2. Затем второй цикл выполняется по крайней мере один раз, только когда точно такое же условие num < 7 равно true. Но это false - иначе вы не выйдете из предыдущего цикла. Поэтому, если num по-прежнему 8, вы пропускаете цикл полностью.
  3. Таким образом, второй цикл всегда пропускается. Если вы не исправите условие. Или гнездо циклов. Или измените num между циклами. Или придумайте свой собственный вариант.

Во втором примере второй цикл содержит совершенно другое условие b<=num, которое в любом случае равно true, если вы не переопределите b. Но даже если вы используете условие num < 7, но сохраняете цикл do while, тело цикла все равно будет выполнено хотя бы один раз. Просто так работает этот тип цикла.

...