Różnica między instrukcją break I continue

Czy ktoś może mi powiedzieć jaka jest różnica między break a continue stwierdzeniami?

Author: Unsigned, 2009-01-20

21 answers

break pozostawia pętlę, continue przeskakuje do następnej iteracji.

 434
Author: Xn0vv3r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 17:59:37

Zobacz rozgałęzienia aby uzyskać więcej szczegółów i próbek kodu:

break

Instrukcja break ma dwie formy: oznakowane i nieoznakowane. Widziałeś nieoznakowana forma w poprzedniej dyskusji instrukcji switch. Ty może również użyć nieoznakowanej przerwy do zakończenia for, while lub do-while pętla [...]

Nieoznakowana instrukcja break kończy najbardziej wewnętrzny przełącznik, dla, while, lub do-while, ale znakowany break kończy zewnętrzna oświadczenie.

continue

Instrukcja continue pomija bieżącą iterację for, podczas gdy , lub pętla do-while. Nieoznakowana forma przeskakuje do końca najskrytszego ciało pętli i ocenia wyrażenie boolean, które kontroluje pętla. [...]

Instrukcja z etykietą continue pomija bieżącą iterację zewnętrznej pętli oznaczonej podaną etykietą.

 93
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-10 23:04:09
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");

Spowoduje to następujące wyjście:

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

Można oznaczyć blok, a nie tylko pętlę for, a następnie przerwać / kontynuować z zagnieżdżonego bloku do zewnętrznego. W kilku przypadkach może to być przydatne, ale ogólnie będziesz starał się unikać takiego kodu, z wyjątkiem logiki programu jest znacznie lepiej zrozumieć niż w poniższym przykładzie:

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));
        }
    }       
}

Ponieważ jest to możliwe, nie oznacza to, że powinieneś go używać.

Jeśli chcesz zaciemnić swój kod w zabawny sposób, nie wybierz złośliwą nazwę, ale http: i podążaj za nią z komentarzem, który wygląda obco, jak webadress w kodzie źródłowym:

http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i) 
{
     if (i == 2) 
         break http;
To chyba od Joshuy Bloch quizzle. :)
 57
Author: user unknown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-11 03:15:22

Break całkowicie opuszcza pętlę i wykonuje polecenia po pętli. Podczas gdy Continue opuszcza bieżącą iterację i wykonuje z następną wartością w pętli.

Ten Kod Wyjaśnia Wszystko:

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");
    }
}

Wyjście:

0   1   2   3   
0   1   2   3   5   6   7   8   9
 27
Author: George Rosario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-06 08:46:08

break całkowicie wychodzi z pętli. continue pomija instrukcje po continue i zapętla się.

 21
Author: jsight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-04 18:32:34

Doskonała odpowiedź prosta i dokładna.

Dodałbym próbkę kodu.

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
 7
Author: OscarRyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:00

A break wypowiedzenie powoduje zakończenie wypowiedzenia, do którego ma zastosowanie (switch, for, do, lub while).

Instrukcja continue jest używana do zakończenia iteracji pętli bieżącej i powrotu sterowania do instrukcji pętli.

 6
Author: Warrior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-20 18:03:28

continue pomija aktualnie wykonywaną pętlę i przechodzi do następnej pętli break wyprowadza z pętlii wykonuje następną instrukcję Po pętli. Nauczyłem się różnicy za pomocą poniższego kodu. Sprawdź różne wyjścia.Mam nadzieję, że to pomoże.

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
 5
Author: Abdullah Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 10:00:08

Rozważ co następuje:

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

Break powoduje zakończenie pętli, a wartość n wynosi 0.

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

Continue powoduje, że licznik programu powróci do pierwszej linii pętli (warunek jest sprawdzany i wartość n jest przyrostem), a końcowa wartość N wynosi 10.

Należy również zauważyć, że break kończy wykonywanie pętli, w której się znajduje:

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);

Wyświetli coś na efekt

0
0
0
0
0
5
 4
Author: Kevin Loney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 01:27:38

Instrukcja break wychodzi z pętli (Następna instrukcja do wykonania jest pierwszą po nawiasie zamykającym), podczas gdy continue rozpoczyna pętlę przy następnej iteracji.

 3
Author: Graeme Perrow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-20 18:02:46

Instrukcja Break

Czasami konieczne jest wyjście z pętli zanim pętla zakończy pełną iterację wszystkich wartości kroku. Na przykład, zapętlenie listy liczb, aż znajdziesz liczbę, która spełnia określony warunek. Lub zapętlenie strumienia znaków z pliku do momentu odczytania określonego znaku.

W poniższym przykładzie używamy prostej pętli for do wypisywania wartości od 0 do 9:

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

Wyjście:

0
1
2
3
4
5
6
7
8
9

Teraz jeśli dodamy instrukcję break when I= = 4, nasz kod wyrwie się z pętli, Gdy i równa się 4. Za pomocą instrukcji break można wyłączyć pętle for, while I do-while. Instrukcja break zostanie wyłączona tylko z pętli bieżącej. Aby wyrwać pętlę zewnętrzną z zagnieżdżonej pętli wewnętrznej, należy użyć etykiet z instrukcją break.

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

Wyjście:

0
1
2
3
4

Kontynuuj Oświadczenie

Instrukcja Java continue pomija bieżącą iterację pętli i przechodzi bezpośrednio do następnej iteracji. Po wywołaniu instrukcji continue w pętli for, wykonanie pętli wykona wartość step i obliczy warunek logiczny przed kontynuacją następnej iteracji. W poniższym przykładzie drukujemy wszystkie wartości od 0 do 9 W pętli, ale pomijamy drukowanie 4.

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

Wyjście:

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

Pętla Label-Break Statement Można używać etykiet wewnątrz zagnieżdżonych pętli , określając, gdzie ma być kontynuowane wykonywanie po wyłamaniu się z pętli wewnętrznej. Zwykle instrukcja break wyłamuje się tylko z najbardziej wewnętrznej pętli, więc jeśli chcesz wyłamać się z zewnętrznej pętli, możesz użyć etykiet, aby to osiągnąć, zasadniczo robiąc coś podobnego do instrukcji goto.

Poniższy przykład wykorzystuje 3 pętle, wszystkie zagnieżdżone wewnątrz siebie. Ponieważ nie ma możliwości całkowicie wyłam z zewnętrznej pętli most od wewnątrz wewnętrznej pętli most, możemy użyć etykiety "outer1", aby to osiągnąć i określić Etykietę obok instrukcji 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;
      }
    }
  }
}

Wyjście:

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

Zwróć uwagę, jak wyświetla się ostatnia linia "0[0]" czyli gdzie j = = 3 i tam nazwaliśmy "break outer1;" aby wyrwać się z zewnętrznej pętli most.

Loop Labels-Continue Statement

Możesz także użyć etykiet ze słowem kluczowym continue do Kontynuuj zapętlanie z określonego punktu. Użycie poprzedniego przykładu i zmiana jednej linii w celu określenia continue outer1; zamiast break outer1; spowoduje, że pętla będzie kontynuowała zapętlanie z etykiety outer1 zamiast wyłamywania się z pętli. Zauważ, że po każdym wywołaniu continue outer1; kod jest kontynuowany z zewnętrznej pętli po zwiększeniu indeksu pętli i o 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]

Source: Loops in Java-Ultimate Guide

 3
Author: gomisha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 14:10:12

Instrukcja break istnieje obecna struktura sterowania pętlą i przeskakuje za nią, podczas gdy continue również wychodzi, ale wraca do stanu pętli.

 2
Author: Gumbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-20 18:04:21

Aby zapobiec wykonaniu czegokolwiek, jeśli warunek jest spełniony, należy użyć continue, a aby wydostać się z pętli, jeśli warunek jest spełniony, należy użyć break.

Na przykład w poniższym kodzie.

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

        if(i==3){

           continue;

        }
       System.out.println(i);
     }

Powyższy kod wyświetli wynik : 0 1 2 4

Teraz rozważ ten kod

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


            if(i==3){

                break;

            }
            System.out.println(i);
         }

Ten kod wydrukuje 0 1 2

To podstawowa różnica między kontynuacją a przerwą.

 2
Author: Navankur Chauhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 10:42:01

Oto semantyka 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:;

Oto semantyka continue:

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:;
}
 1
Author: Michael Buen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-20 18:10:55

Po pierwsze, myślę, że powinieneś wiedzieć, że istnieją dwa rodzaje break I continue w Javie, które są oznaczone jako break, unlabeled break, unlabeled continue i unlabeled continue.Teraz powiem o różnicy między nimi.

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");
    }
}

Nieoznakowana instrukcja break kończy najbardziej wewnętrzny przełącznik ,for, 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.
        }
    }
}

Znakowany break kończy zewnętrzną instrukcję.jeśli javac i java to demo, otrzymasz:

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.");
}

Unlabeled continue Instrukcja pomija bieżącą iterację instrukcji 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
        }
    }
}

Instrukcja continue pomija bieżącą iterację zewnętrznej pętli oznaczonej podaną etykietą, jeśli javac i java Demo, otrzymasz:

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

Jeśli masz jakieś pytanie, możesz zobaczyć Tutorial Java tego: wpisz opis linku tutaj

 1
Author: thinkinjava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-09 14:15:37

Prosty Przykład:

break opuszcza pętlę.

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

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

continue powróci do pętli startowej.

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
 1
Author: Markus Lausberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-04 18:34:01

Mówiąc najprościej: break zakończy bieżącą pętlę i kontynuuje wykonywanie w pierwszej linii po zakończeniu pętli. Kontynuuj skoki z powrotem do stanu pętli i uruchamia pętlę.

 0
Author: Electrons_Ahoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-20 18:02:53
for (int i = 1; i <= 3; i++) {
        if (i == 2) {

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

Wypróbuj ten kod w netbeans zrozumiesz różnice między break I continue

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

            break;
        }
        System.out.print("[i:" + i + "]");
 0
Author: Reem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-01 16:21:39

Prosty program do zrozumienia różnicy między kontynuacją a przerwą

Kiedy continue jest używany

    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

Kiedy break jest używany

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
 0
Author: coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-04 18:34:52

Kontynuuj Statment zatrzymaj itrację i rozpocznij następną ittrację 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 + "]");
    }

And Break Statment zatrzymaj pętlę lub wyjdź z pętli

 0
Author: Null Pointer Exception,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-13 00:50:13

Więc jesteś wewnątrz pętli For lub while. Użycie break; spowoduje, że będziesz poza pętlą. To się skończy. Kontynuuj; powie mu, aby uruchomił następną iterację.

Nie ma sensu używać polecenia continue w if, ale break; jest przydatne. W switch...case, Zawsze używaj break; aby zakończyć przypadek, więc nie wykonuje innego przypadku.

 -1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-20 18:13:57