Что такое ключевое слово «continue» и как оно работает в Java?


302

Я впервые увидел это ключевое слово, и мне было интересно, может ли кто-нибудь объяснить мне, что оно делает.

  • Какое continueключевое слово?
  • Как это работает?
  • Когда это используется?

Ответы:


416

continueЗаявление без этикетки будет переоформить от состояния самих внутреннего whileили doпетли, и из выражения обновления самого внутреннего forцикла. Он часто используется для раннего завершения обработки цикла и, таким образом, для избежания глубоко вложенных ifоператоров. В следующем примере continueбудет получена следующая строка без обработки следующего оператора в цикле.

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

С меткой continueбудет повторно выполняться из цикла с соответствующей меткой, а не из самого внутреннего цикла. Это может быть использовано для избежания глубоко вложенных циклов или просто для ясности.

Иногда continueтакже используется в качестве заполнителя, чтобы сделать тело пустого цикла более понятным.

for (count = 0; foo.moreData(); count++)
  continue;

То же утверждение без метки также существует в C и C ++. Эквивалент в Perl есть next.

Этот тип потока управления не рекомендуется, но если вы решите, вы также можете использовать его continueдля имитации ограниченной формы goto. В следующем примере continueбудет повторно выполнен пустой for (;;)цикл.

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;

513

continueвроде как goto. Вы знакомы с break? Легче думать о них в отличие

  • break завершает цикл (переходит к коду под ним).

  • continue завершает остальную часть обработки кода в цикле для текущей итерации, но продолжает цикл.


1
хороший пример для перерыва и продолжения, я думал, что это было то же самое до>. <
yfsx

Невозможно сделать из этого прекрасного идеального 500! +1
шляпа

100

Давайте посмотрим на пример:

int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

Это позволит получить сумму только нечетных чисел от 1 до 100.


28

Если вы думаете о теле цикла как о подпрограмме, continueэто вроде как return. Такое же ключевое слово существует в C и служит для той же цели. Вот надуманный пример:

for(int i=0; i < 10; ++i) {
  if (i % 2 == 0) {
    continue;
  }
  System.out.println(i);
}

Это распечатает только нечетные числа.


16

Как правило, я вижу continuebreak) как предупреждение о том, что код может использовать некоторый рефакторинг, особенно если объявление цикла whileor forне сразу видно. То же самое верно для returnсередины метода, но по несколько иной причине.

Как уже говорили другие, continueпереходит к следующей итерации цикла, а breakвыходит из замкнутого цикла.

Это могут быть временные бомбы обслуживания, потому что нет прямой связи между continue/ breakи циклом, который он продолжает / прерывает, кроме контекста; добавьте внутренний цикл или переместите «кишки» цикла в отдельный метод, и вы получите скрытый эффект continue/ breakfailing.

ИМХО, лучше использовать их в качестве крайней меры, а затем убедиться, что их использование тесно сгруппировано в начале или конце цикла, чтобы следующий разработчик мог видеть «границы» цикла на одном экране ,

continue, breakи return(кроме «Единого истинного возврата» в конце вашего метода) все попадают в общую категорию «скрытых GOTO». Они помещают управление циклами и функциями в неожиданные места, что в конечном итоге приводит к ошибкам.


Меня интересует причина, по которой возвращение плохое. У меня уже есть чувство, что возвращение - это плохо, потому что Scala не поощряет возвращение .
Jus12

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

5

«продолжить» в Java означает перейти к концу текущего цикла, означает: если компилятор увидит продолжение в цикле, он перейдет к следующей итерации

Пример: это код для печати нечетных чисел от 1 до 10

компилятор будет игнорировать код печати всякий раз, когда видит, что он продолжает переходить к следующей итерации

for (int i = 0; i < 10; i++) { 
    if (i%2 == 0) continue;    
    System.out.println(i+"");
}


4

Как уже упоминалось, continueбудет пропущена обработка кода ниже и до конца цикла. Затем вы переходите к условию цикла и запускаете следующую итерацию, если это условие все еще выполняется (или если есть флаг, к условию обозначенного цикла).

Следует подчеркнуть, что в случае do - whileвы перешли к условию внизу после a continue, а не в начале цикла.

Вот почему многие люди не могут правильно ответить на то, что сгенерирует следующий код.

    Random r = new Random();
    Set<Integer> aSet= new HashSet<Integer>();
    int anInt;
    do {
        anInt = r.nextInt(10);
        if (anInt % 2 == 0)
            continue;
        System.out.println(anInt);
    } while (aSet.add(anInt));
    System.out.println(aSet);

* Если ваш ответ aSetбудет содержать нечетные числа только 100% ... вы не правы!


4

Continue - это ключевое слово в Java, которое используется для пропуска текущей итерации.

Предположим, вы хотите распечатать все нечетные числа от 1 до 100

public class Main {

    public static void main(String args[]) {

    //Program to print all odd numbers from 1 to 100

        for(int i=1 ; i<=100 ; i++) {
            if(i % 2 == 0) {
                continue;
            }
            System.out.println(i);
        }

    }
}

Оператор continue в приведенной выше программе просто пропускает итерацию, когда i четное, и печатает значение i, если оно нечетное.

Оператор Continue просто выводит вас из цикла без выполнения остальных операторов внутри цикла и запускает следующую итерацию.


3

Рассмотрим условие If Else. Оператор continue выполняет то, что есть в условии, и выходит из условия, т.е. переходит к следующей итерации или условию. Но перерыв выходит из цикла. Рассмотрим следующую программу. '

public class ContinueBreak {
    public static void main(String[] args) {
        String[] table={"aa","bb","cc","dd"};
        for(String ss:table){
            if("bb".equals(ss)){
                continue;
            }
            System.out.println(ss);
            if("cc".equals(ss)){
                break;
            }
        }
        System.out.println("Out of the loop.");
    }

}

Будет напечатано: aa cc Out of the loop.

Если вы используете break вместо continue (After if.), Это просто aa и выходит из цикла .

Если условие "bb" равно ss выполняется: Для продолжения: переход к следующей итерации, т.е. "cc" .equals (ss). Для разрыва: он выходит из цикла и печатает «Из цикла».


2
Уверен, он также напечатает cc, так как "cc"! = "Bb" и оператор print находится передbreak
Ted Delezene

2

Я немного опоздал на вечеринку, но ...

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

while ((buffer[i++] = readChar()) >= 0)
    continue;

В этом случае вся работа по чтению символа и добавлению его bufferвыполняется в выражении, управляющем whileциклом. continueЗаявление служит визуальным индикатором , что петля не нужно тело.

Это немного более очевидно, чем эквивалент:

while (...)
{ }

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

while (...)
    ;

Я определенно согласен с тем, что это более чистый и более читаемый код, но я не уверен, что следую вашему аргументу о том, что он «безопаснее», чем другой вариант, while (Statement); Разграничены напрямую с помощью точки с запятой.
аксолотль

@Aalok - это безопаснее, потому что одинокую точку с запятой легко пропустить визуально. Это также легко исключить случайно, что сделало бы следующее утверждение после того, как whileстанет телом whileпредложения, и которое не было бы визуально очевидно. Явное continueочевидно и выражает намерение, которого нет в пустом утверждении.
Дэвид Р. Триббл

Понятно, вы имеете в виду, в основном, с точки зрения дизайна. В этом есть смысл. У меня было что-то, что лежало в основе структуры цикла.
аксолотль

1

В основном в Java, продолжить это утверждение. Поэтому оператор continue обычно используется с циклами для пропуска текущей итерации.

Как и когда он используется в Java, смотрите ссылку ниже. У него есть объяснение с примером.

https://www.flowerbrackets.com/continue-java-example/

Надеюсь, поможет !!



0

Оператор continue используется в структуре управления циклом, когда вам нужно сразу перейти к следующей итерации цикла.

Может использоваться с циклом for или while. Оператор Java continue используется для продолжения цикла. Он продолжает текущий поток программы и пропускает оставшийся код при указанном условии.

В случае внутреннего цикла он продолжает только внутренний цикл.

Мы можем использовать оператор Java continue во всех типах циклов, таких как цикл for, while и do-while.

например

class Example{
    public static void main(String args[]){
        System.out.println("Start");
        for(int i=0; i<10; i++){
            if(i==5){continue;}
            System.out.println("i : "+i);   
        }
        System.out.println("End.");
    }
}

вывод:

Start
i : 0
i : 1
i : 2
i : 3
i : 4
i : 6
i : 7
i : 8
i : 9
End.

[номер 5 пропущен]

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.