if-оператор с продолжением или разрывом - PullRequest
0 голосов
/ 29 апреля 2018

Я делаю симуляцию теста Java OCA. Во время моего изучения книги «ОСА - Учебное пособие» (Sybex) во второй главе есть следующее (Таблица 2.5, стр. 91):

if - разрешает оператор break: NO

если - позволяет продолжить оператор: НЕТ

Но во время симуляции теста Java OCA, проведенного Sybex (онлайн-книга OCA), возникает вопрос:

int  x= 5;
    while (x>=0) {
        int y = 3;
        while (y>0) {
            if (x<2)
                continue;
            x--; y--;
            System.out.println(x*y + " ");
        }
    }

Мой ответ был: он не компилируется Но правильный ответ: 8 3 0 2 * * +1010

Что такое правильная информация? Что правильно (книга или симуляция)?

Это таблица:

Table 2.5 - page 91 - OCA Java book

Большое спасибо!

Ответы [ 4 ]

0 голосов
/ 02 мая 2018

И книжные и тестовые симуляторы правы. break и continue ключевые слова не допускаются внутри if. continue, который вы видите внутри if, абсолютно действителен, потому что он появляется в контексте внешнего while, так что это нормально. Чтобы обернуть все это, когда вы запускаете блок while или for, использование break и continue везде внутри этого блока является правильным, даже если это происходит внутри блока if.

0 голосов
/ 29 апреля 2018

обычно break и continue разрешены в операторах if, но вы не должны использовать их так часто, потому что это плохо.

* единица измерения = рамки модульного тестирования

Причина может быть, например, следующей: если вы пытаетесь протестировать свое программное обеспечение с модулем (если вы еще не знаете модуль, еще не волнуйтесь: D), гораздо сложнее понять, что делает код, чем обычно, а также проверить код ,

Удачи и повеселиться, надеюсь, я могу помочь вам

0 голосов
/ 02 мая 2018

Я думаю, что вам нужно понять, что в вашем коде оператор if находится внутри цикла while (который находится внутри другого цикла while), и поэтому в этом случае нормально использовать continue. Оператор if вне цикла не может использовать continue. Но внутри цикла for, во время цикла loop или do while, вы МОЖЕТЕ использовать continue внутри оператора if.

Таким образом, код, который вы предоставили, работает и вывод:

8 
3 
0 
2 

Но затем я взял ваш код и прокомментировал два цикла while, и теперь код не компилируется:

        int  x= 5;
//      while (x>=0) {
            int y = 3;
//          while (y>0) {
                if (x<2)
                    continue; //<-- COMPILE ERROR: continue cannot be used outside of a loop
                x--; y--;
                System.out.println(x*y + " ");
//          }
//      }

Вывод:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    continue cannot be used outside of a loop

Я написал очень подробное руководство по циклу Java , которое охватывает оператор продолжения , оператор разбиения и все различные типы циклов в Java.

0 голосов
/ 29 апреля 2018

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

public static void main(String[] args) {
   int  x= 5;
 //while (x>=0) {
   int y = 3;
 //while (y>0) {
     if (x<2)
     continue;
     x--; y--;
      System.out.println(x*y + " ");
       }
      }
    // }
  // }

Error:(10, 21) java: continue outside of loop
...