Разница между инструкцией break и continue

может кто-нибудь сказать мне разницу между break и continue заявления?

21 ответов


break оставляет петли, continue переход к следующей итерации.


посмотреть Операторы Ветвления для больше деталей и образцов кода:

break

оператор break имеет две формы: помеченные и немаркированные. Вы видели немаркированная форма в предыдущем обсуждении оператора switch. Вы также можно использовать не помеченный разрыв для завершения for, while или do-while петля.[ ..]

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

continue

оператор continue пропускает текущую итерацию, а , или do-while цикл. Немеченая форма проскакивает в конец внутреннего тело цикла и вычисляет логическое выражение, управляющее петля. [...]

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


System.out.println ("starting loop:");
for (int n = 0; n < 7; ++n)
{
    System.out.println ("in loop: " + n);
    if (n == 2) {
        continue;
    }
    System.out.println ("   survived first guard");
    if (n == 4) {
        break;
    }
    System.out.println ("   survived second guard");
    // continue at head of loop
}
// break out of loop
System.out.println ("end of loop or exit via break");

это приведет к следующему выводу:

starting loop:
in loop: 0
    survived first guard
    survived second guard
in loop: 1
    survived first guard
    survived second guard
in loop: 2
in loop: 3
    survived first guard
    survived second guard
in loop: 4
    survived first guard
end of loop or exit via break

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

first:
for (int i = 0; i < 4; ++i) 
{
    second:
    for (int j = 0; j < 4; ++j) 
    {
        third:
        for (int k = 0; k < 4; ++k) 
        {
            System.out.println ("inner start: i+j+k " + (i + j + k));
            if (i + j + k == 5)
                continue third;
            if (i + j + k == 7)
                continue second;
            if (i + j + k == 8)
                break second;
            if (i + j + k == 9)
                break first;
            System.out.println ("inner stop:  i+j+k " + (i + j + k));
        }
    }       
}

потому что это возможно, это не значит, что вы должны использовать его.

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

http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i) 
{
     if (i == 2) 
         break http;

Я думаю, это от Джошуа Блоха quizzle. :)


Break полностью покидает цикл и выполняет операторы после цикла. В то время как Continue оставляет текущую итерацию и выполняется со следующим значением в цикле.

Этот Код Объясняет Все:

public static void main(String[] args) {
    for(int i=0;i<10;i++)
    {
        if (i==4)
        {
            break;
        }
        System.out.print(i+"\t");

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

        if (i==4)
        {
            continue;
        }
        System.out.print(i+"\t");
    }
}

выход:

0   1   2   3   
0   1   2   3   5   6   7   8   9

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


отличный ответ простой и точный.

Я бы добавил пример кода.

C:\oreyes\samples\java\breakcontinue>type BreakContinue.java

    class BreakContinue {

        public static void main( String [] args ) {

               for( int i = 0 ; i < 10 ; i++ ) {

                     if( i % 2 == 0) { // if pair, will jump
                         continue; // don't go to "System.out.print" below.
                     }

                     System.out.println("The number is " + i );

                     if( i == 7 ) {
                         break; // will end the execution, 8,9 wont be processed
                      }

               }
        }

    }

C:\oreyes\samples\java\breakcontinue>java BreakContinue
The number is 1
The number is 3
The number is 5
The number is 7

A break заявление приводит к прекращению заявления, к которому оно применяется (switch, for, do или while).

A continue оператор используется для завершения итерации текущего цикла и возврата управления в оператор цикла.


continue пропускает ток-исполнителя цикл и ПЕРЕХОДИТ В следующий цикл, тогда как break ВЫХОДИТ на цикл и выполняет следующий оператор после петлю. Я узнал разницу, используя следующий код. Проверьте различные выходы.Надеюсь, это поможет.

public static void main(String[] args) {
    for(int i = 0; i < 5; i++){
        if (i == 3) {
            continue;
        }
        System.out.print(i);
    }
}//prints out 0124, continue moves to the next iteration skipping printing 3

public static void main(String[] args) {
    for(int i = 0; i < 5; i++){
        if (i == 3) {
            break;
        }
        System.out.print(i);
    }
}//prints out 012, break moves out of the loop hence doesnt print 3 and 4

рассмотрим следующее:

int n;
for(n = 0; n < 10; ++n) {
    break;
}
System.out.println(n);

перерыв приводит к завершению цикла и значению n равен 0.

int n;
for(n = 0; n < 10; ++n) {
    continue;
}
System.out.println(n);

дальше заставляет счетчик программы возвращаться в первую строку цикла (условие проверяется, и значение n увеличивается) и конечное значение n это 10.

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

int m;
for(m = 0; m < 5; ++m)
{
    int n;
    for(n = 0; n < 5; ++n) {
        break;
    }
    System.out.println(n);
}
System.out.println(m);

выведет что-то на эффект

0
0
0
0
0
5

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


Break Оператор

иногда надо выход из цикла прежде чем цикл завершит полную итерацию по всем значениям шага. Например, цикл по списку чисел, пока вы не найдете число, удовлетворяющее определенному условию. Или цикл над потоком символов из файла, пока определенный символ не будет прочитан.

в следующем примере мы используем простой цикл for для печати значений от 0 до 9:

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

выход:

0
1
2
3
4
5
6
7
8
9

теперь, если мы добавим оператор break, когда i==4, наш код вырвется из цикла, как только i равняется 4. Оператор break можно использовать для выхода из циклов for, while и do-while. Оператор break будет только вырваться из текущего цикла. Чтобы вырваться из внешнего цикла из вложенного внутреннего цикла, вам нужно будет использовать метки с разрывом заявление.

for(int i=0; i<10; i++) {
  System.out.println(i);
  if(i==4) {
    break;
  }
}

выход:

0
1
2
3
4

Continue Оператор

в Java continue оператор пропускает текущую итерацию цикла и переходит сразу к следующей итерации. После вызова оператора continue в цикле for выполнение цикла выполнит значение шага и вычислит логическое условие перед выполнением следующей итерации. В следующем примере мы распечатываем все значения из От 0 до 9 в цикле, но мы пропускаем печать 4.

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

выход:

0
1
2
3
5 <---- SKIPPED OVER 4 and continued with next loop iteration
6
7
8
9

Loop Label - Break Statement Вы можете использовать метки внутри вложенных циклов С указанием, где вы хотите продолжить выполнение после выхода из внутреннего цикла. Обычно оператор break выходит только из внутреннего цикла, поэтому, когда вы хотите выйти из внешнего цикла, вы можете использовать метки для выполнения этого, по существу делая что-то подобно инструкции goto.

в следующем примере используется 3 цикла, все вложенные друг в друга. Поскольку невозможно полностью вырваться из внешнего цикла most изнутри внутреннего цикла most, мы можем использовать метку "outer1" для выполнения этого и указать метку рядом с инструкцией break.

outer1:
for(int i=0; i<5; i++) {
  for(int j=0; j<4; j++) {
    for(int k=0; k<2; k++) {
      System.out.println("[" + i + "][" + j + "][" + k + "]");
      if(j == 3) {
        break outer1;
      }
    }
  }
}

выход:

[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0]

обратите внимание, как отображается последняя строка "0[0]", где j == 3, и именно там мы назвали " перерыв outer1; " вырваться из внешней петли most.

Метки Цикла-Продолжить Заявление

вы также можете использовать метки с ключевым словом continue для продолжения цикла из определенной точки. Возьмем предыдущий пример и просто изменим одну строку, чтобы указать continue outer1; вместо break outer1; вызовет цикл для продолжения цикла из outer1 ярлык вместо того, чтобы вырваться из петли. Обратите внимание, как каждый раз continue outer1; вызывается, код продолжается от внешнего цикл после увеличения индекса цикла i на 1.

outer1:
for(int i=0; i<5; i++) {
  for(int j=0; j<4; j++) {
    for(int k=0; k<2; k++) {
      System.out.println("[" + i + "][" + j + "][" + k + "]");
      if(j == 3) {
        continue outer1;
    }
  }
}

[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[1][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[1][0][1]
[1][1][0]
[1][1][1]
[1][2][0]
[1][2][1]
[1][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[2][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[2][0][1]
[2][1][0]
[2][1][1]
[2][2][0]
[2][2][1]
[2][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[3][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[3][0][1]
[3][1][0]
[3][1][1]
[3][2][0]
[3][2][1]
[3][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[4][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[4][0][1]
[4][1][0]
[4][1][1]
[4][2][0]
[4][2][1]
[4][3][0]

источник: петли в Java-Ultimate Guide


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


чтобы предотвратить что-либо от выполнения, если условие выполнено, следует использовать continue и выйти из цикла, если условие выполнено, следует использовать break.

например, в приведенном ниже коде.

 for(int i=0;i<5;i++){

        if(i==3){

           continue;

        }
       System.out.println(i);
     }

приведенный выше код выведет результат: 0 1 2 4

теперь рассмотрим этот код

 for(int i=0;i<5;i++){


            if(i==3){

                break;

            }
            System.out.println(i);
         }

этот код будет печатать 0 1 2

это основное различие в продолжении и перерыве.


вот семантика break:

int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// find 9
for(int i = 0; i < a.Length; i++)
{
    if (a[i] == 9) 
        goto goBreak;

    Console.WriteLine(a[i].ToString());      
}
goBreak:;

вот смысл продолжения:

int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// skip all odds
for(int i = 0; i < a.Length; i++)
{
    if (a[i] % 2 == 1) 
        goto goContinue;

    Console.WriteLine(a[i].ToString());      

goContinue:;
}

во-первых,я думаю,вы должны знать,что есть два типа break и continue в Java, которые помечены break, unlabeled break, помечены continue и unlabeled continue.Теперь я расскажу о разнице между ними.

class BreakDemo {
public static void main(String[] args) {

    int[] arrayOfInts = 
        { 32, 87, 3, 589,
          12, 1076, 2000,
          8, 622, 127 };
    int searchfor = 12;

    int i;
    boolean foundIt = false;

    for (i = 0; i < arrayOfInts.length; i++) {
        if (arrayOfInts[i] == searchfor) {
            foundIt = true;
            break;//this is an unlabeled break,an unlabeled break statement terminates the innermost switch,for,while,do-while statement.
        }
    }

    if (foundIt) {
        System.out.println("Found " + searchfor + " at index " + i);
    } else {
        System.out.println(searchfor + " not in the array");
    }
}

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

public class BreakWithLabelDemo {
public static void main(String[] args) {
    search:
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.println(i + " - " + j);
            if (j == 3)
                break search;//this is an labeled break.To notice the lab which is search.
        }
    }
}

помеченный разрыв завершает внешний оператор.если вы javac и java это демо, вы будете получить:

0 - 0
0 - 1
0 - 2
0 - 3
class ContinueDemo {
public static void main(String[] args) {

    String searchMe = "peter piper picked a " + "peck of pickled peppers";
    int max = searchMe.length();
    int numPs = 0;

    for (int i = 0; i < max; i++) {
        // interested only in p's
        if (searchMe.charAt(i) != 'p')
            continue;//this is an unlabeled continue.

        // process p's
        numPs++;
    }
    System.out.println("Found " + numPs + " p's in the string.");
}

оператор без метки continue пропускает текущую итерацию оператора for, while, do-while.

public class ContinueWithLabelDemo {
public static void main(String[] args) {
    search:
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.println(i + " - " + j);
            if (j == 3)
                continue search;//this is an labeled continue.Notice the lab which is search
        }
    }
}

помеченный оператор continue пропускает текущую итерацию внешнего цикла, отмеченного данной меткой, если вы javac и java демо, вы получите:

0 - 0
0 - 1
0 - 2
0 - 3
1 - 0
1 - 1
1 - 2
1 - 3
2 - 0
2 - 1
2 - 2
2 - 3

если у вас есть какие-либо вопросы, вы можете увидеть учебник Java этого: Введите описание ссылки здесь


Простой Пример:

break выйдет петля.

int m = 0;
for(int n = 0; n < 5; ++n){
  if(n == 2){
    break;
  }
  m++;
}

System.out.printl("m:"+m); // m:2

continue вернемся к началу цикла.

int m = 0;
for(int n = 0; n < 5; ++n){
  if(n == 2){
    continue; // Go back to start and dont execute m++
  }
  m++;
}

System.out.printl("m:"+m); // m:4

проще говоря: break завершит текущий цикл и продолжит выполнение в первой строке после завершения цикла. continue возвращается к состоянию цикла и продолжает выполнять цикл.


for (int i = 1; i <= 3; i++) {
        if (i == 2) {

            continue;
        }
        System.out.print("[i:" + i + "]");

попробуйте этот код в netbeans, вы поймете разницу между break и continue

for (int i = 1; i <= 3; i++) {
        if (i == 2) {

            break;
        }
        System.out.print("[i:" + i + "]");

простая программа для понимания разницы между continue и break

, когда continue используется

    public static void main(String[] args) {
    System.out.println("HelloWorld");
    for (int i = 0; i < 5; i++){
        System.out.println("Start For loop i = " + i);
        if(i==2){
            System.out.println("Inside if Statement for i = "+i);
           continue;
        }
        System.out.println("End For loop i = " + i);
    }
    System.out.println("Completely out of For loop");
}


OutPut:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Start For loop i = 3
End For loop i = 3
Start For loop i = 4
End For loop i = 4
Completely out of For loop

, когда break используется

public static void main(String[] args) {
    System.out.println("HelloWorld");
    for (int i = 0; i < 5; i++){
        System.out.println("Start For loop i = " + i);
        if(i==2){
            System.out.println("Inside if Statement for i = "+i);
           break;
        }
        System.out.println("End For loop i = " + i);
    }
    System.out.println("Completely out of For loop");
}

Output:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Completely out of For loop

продолжить Statment остановите itration и запустите следующий ittration Ex:

System.out.println("continue when i is 2:");
    for (int i = 1; i <= 3; i++) {
        if (i == 2) {
            System.out.print("[continue]");
            continue;
        }
        System.out.print("[i:" + i + "]");
    }

и перерыв Statment остановить цикл или выйти из цикла


Итак, вы находитесь внутри цикла for или while. Использование break; выведет вас за пределы цикла. То есть, это закончится. Continue; скажет ему запустить следующую итерацию.

нет смысла использовать инструкцию continue in if, но break; полезно. В переключатель...case, всегда используйте break; чтобы закончить случай, поэтому он не выполняет другой случай.