Что такое ключевое слово "continue" и как оно работает в Java? - PullRequest
289 голосов
/ 23 декабря 2008

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

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

Ответы [ 11 ]

497 голосов
/ 23 декабря 2008

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

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

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

403 голосов
/ 23 декабря 2008
Оператор

A 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;
96 голосов
/ 23 декабря 2008

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

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

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

28 голосов
/ 23 декабря 2008

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

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

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

17 голосов
/ 24 декабря 2008

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

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

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

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

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

5 голосов
/ 19 декабря 2017

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

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

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

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

4 голосов
/ 22 марта 2016

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

Следует подчеркнуть, что в случае do - while вы переходите в условие внизу после 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% ... вы ошибаетесь!

3 голосов
/ 29 августа 2016

Рассмотрим условие 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 (после if.), Он просто выведет aa и выходит из цикла

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

2 голосов
/ 22 декабря 2017

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

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

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

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

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

while (...)
{ }

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

while (...)
    ;
1 голос
/ 19 апреля 2019

Продолжить - это ключевое слово в 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 , если оно нечетное.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...