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



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

553   21  

21 ответов:

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

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

break

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

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

continue

оператор continue пропускает текущую итерацию a for, while , или 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, а затем прервать/продолжить от вложенного блока к внешнему. В некоторых случаях это может быть полезно, но в целом вы постараетесь избежать такого кода, за исключением того, что логика программы намного лучше понять, чем в следующем примере:

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: и следуете за ним с комментарием, который выглядит чужим, как веб-адрес в исходном коде:

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

The 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 Оператор Вы можете использовать метки внутри вложенных циклов С указанием, где вы хотите продолжить выполнение после выхода из внутреннего цикла. Обычно оператор 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; " вырваться из внешней самой петли.

Метки Цикла-Продолжить Оператор

вы также можете использовать метки с ключевым словом 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

The 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

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

вот семантика разрыва:

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 завершает самый внутренний переключатель, для ,while, 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 завершит текущий цикл и продолжит выполнение в первой строке после окончания цикла. продолжить переход обратно в состояние цикла и продолжает выполнять цикл.

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 Например:

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. Используя перерыв; поставит вас вне цикла. То есть, это закончится. Продолжайте; скажет ему, чтобы запустить следующую итерацию.

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

Comments

    Ничего не найдено.