Instrukcja break ma dwie formy: etykietowane i nieznakowane. Widziałeś nieznakowaną formę w poprzedniej dyskusji instrukcji switch. Możesz także użyć nieoznaczonej przerwy, aby zakończyć pętlę for, while lub do-while [...]
Nieznakowana instrukcja break przerywa najbardziej wewnętrzny przełącznik dla instrukcji „while” lub „do-while”, ale przerwa oznaczona etykietą kończy instrukcję zewnętrzną.
continue
Instrukcja Continue pomija bieżącą iterację pętli for, while lub do-while. Nieoznakowana postać przeskakuje na koniec najbardziej wewnętrznej części pętli i ocenia wyrażenie logiczne, które kontroluje pętlę. [...]
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 loopSystem.out.println ("end of loop or exit via break");
Doprowadzi to do następujących wyników:
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żesz opisać blok, nie tylko pętlę for, a następnie przerwać / kontynuować z bloku zagnieżdżonego do zewnętrznego. W kilku przypadkach może to być przydatne, ale ogólnie starasz się unikać takiego kodu, z tym wyjątkiem, że logika programu jest znacznie lepsza do zrozumienia 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 wybierasz złośliwej nazwy, ale http: i podążaj za nią z komentarzem, który wygląda obco, jak adres internetowy w kodzie źródłowym:
http://stackoverflow.com/questions/462373for(int i =0; i <4;++i){if(i ==2)break http;
Świetny pomysł z zaciemnieniem, czy też nie miałbyś po prostu http://stackoverflow.com/questions/462373/pracy?
Caelum
@ user2104648: tak, to musiał być błąd wycinania i wklejania.
użytkownik nieznany
28
Break całkowicie opuszcza pętlę i wykonuje instrukcje po pętli. Natomiast Continue pozostawia bieżącą iterację i wykonuje z następną wartością w pętli.
Czasami konieczne jest wyjście z pętli, zanim pętla zakończy w pełni iterację wszystkich wartości kroku. Na przykład zapętlanie listy numerów, aż znajdziesz liczbę spełniającą określony warunek. Lub zapętlanie strumienia znaków z pliku, aż określony znak zostanie odczytany.
W poniższym przykładzie używamy prostej pętli for, aby wydrukować wartości od 0 do 9:
for(int i=0; i<10; i++){System.out.println(i);}
Wynik:
0123456789
Teraz, jeśli dodamy instrukcję break, gdy i == 4, nasz kod wyrwie się z pętli, gdy i wyniesie 4. Możesz użyć instrukcji break do wyrwania się z pętli for, while i pętli do-while. Instrukcja break wyłamie się tylko z bieżącej pętli. Aby oderwać się od zewnętrznej pętli od zagnieżdżonej pętli wewnętrznej, należy użyć etykiet z instrukcją break.
Instrukcja kontynuacji Java 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ść kroku i oceni warunek logiczny przed przejściem do następnej iteracji. W poniższym przykładzie wypisujemy wszystkie wartości od 0 do 9 w pętli, ale pomijamy drukowanie 4.
01235<---- SKIPPED OVER 4 and continued with next loop iteration
6789
Etykieta pętli - instrukcja Break
Możesz używać etykiet w zagnieżdżonych pętlach , określając, gdzie chcesz kontynuować wykonywanie po zerwaniu z wewnętrznej pętli. Zwykle instrukcja break wyrwie się tylko z najbardziej wewnętrznej pętli, więc jeśli chcesz wyrwać się z zewnętrznej pętli, możesz użyć etykiet, aby to zrobić, zasadniczo robiąc coś podobnego do instrukcji goto.
Poniższy przykład wykorzystuje 3 pętle, wszystkie zagnieżdżone w sobie. Ponieważ nie ma możliwości całkowitego wyrwania się z najbardziej zewnętrznej pętli z wnętrza najbardziej wewnętrznej pętli, 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;}}}}
Zauważ, że ostatni wyświetlany wiersz to „ 0 [0]”, gdzie j == 3 i tam nazwaliśmy „break outer1;” wyrwać się z najbardziej zewnętrznej pętli.
Etykiety pętli - kontynuuj Instrukcja
Możesz także użyć etykiet ze słowem kluczowym kontynuuj, aby kontynuować zapętlanie od określonego punktu. Biorąc poprzedni przykład i po prostu zmieniając jedną linię, aby określić continue outer1;zamiast break outer1;spowoduje, że pętla będzie kontynuować zapętlanie od outer1etykiety zamiast wyłamywania się z pętli. Zwróć uwagę, jak za każdym razem continue outer1;jest wywoływany, kod jest kontynuowany z zewnętrznej pętli po zwiększeniu indeksu 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]
C:\oreyes\samples\java\breakcontinue>type BreakContinue.java
classBreakContinue{publicstaticvoid main(String[] args ){for(int i =0; i <10; i++){if( i %2==0){// if pair, will jumpcontinue;// 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 BreakContinueThe number is 1The number is 3The number is 5The number is 7
continuepomija bieżącą pętlę wykonawczą i PRZEJŚCIE do następnej pętli, natomiast breakWYJŚCIE z pętli i wykonuje następną instrukcję po pętli. Nauczyłem się różnicy za pomocą następującego kodu. Sprawdź różne wyniki. Mam nadzieję, że to pomoże.
publicstaticvoid 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 3publicstaticvoid 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);
break powoduje zakończenie pętli, a wartość n wynosi 0.
int n;for(n =0; n <10;++n){continue;}System.out.println(n);
Kontynuuj powoduje, że licznik programu powraca do pierwszego wiersza pętli (warunek jest sprawdzany, a wartość n jest przyrostem), a końcowa wartość n wynosi 10.
Należy również zauważyć, że przerwa tylko 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);
W swoich przykładach masz różne problemy dotyczące zakresu.
Darron
3
Do breakprzerwy sprawozdanie z pętli (następna instrukcja do wykonania jest pierwszym po nawiasem zamykającym), natomiast continueuruchamia pętlę przy następnej iteracji.
Aby zapobiec wykonywaniu czegokolwiek, jeśli warunek jest spełniony, należy użyć kontynuacji i aby wyjść z pętli, jeśli warunek jest spełniony, należy użyć przerwy.
int[] a =newint[]{1,3,4,6,7,9,10};// find 9for(int i =0; i < a.Length; i++){if(a[i]==9)goto goBreak;Console.WriteLine(a[i].ToString());}
goBreak:;
oto semantyka kontynuacji:
int[] a =newint[]{1,3,4,6,7,9,10};// skip all oddsfor(int i =0; i < a.Length; i++){if(a[i]%2==1)goto goContinue;Console.WriteLine(a[i].ToString());
goContinue:;}
Czy C # nie ma przerwy; i kontynuuj; sprawozdania? Nie mogę w to uwierzyć.
OscarRyz
Tak C # mam, właśnie wyjaśniam semantykę break i kontynuuję :-)
Michael Buen
1
Nic nie wyjaśnisz, właśnie opublikowałeś kod. Nawet nie skomentował kodu. Fragment kodu nie jest wyjaśnieniem ani „semantycznym”.
Markiz Lorne
1
Po pierwsze, myślę, że powinieneś wiedzieć, że istnieją dwa rodzaje przerw i kontynuuj w Javie, które są oznaczone jako przerwa, przerwa bez etykiety, oznaczone kontynuacja i kontynuacja bez etykiety. Teraz porozmawiam o różnicy między nimi.
classBreakDemo{publicstaticvoid 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");}}
Nieznakowana instrukcja break kończy wewnętrzny przełącznik dla instrukcji while, do-while.
publicclassBreakWithLabelDemo{publicstaticvoid 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.}}}
Podział oznaczony etykietą kończy zewnętrzną instrukcję. Jeśli wykonasz javac i java to demo, otrzymasz:
0 - 0
0 - 1
0 - 2
0 - 3
classContinueDemo{publicstaticvoid 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'sif(searchMe.charAt(i)!='p')continue;//this is an unlabeled continue.// process p's
numPs++;}System.out.println("Found "+ numPs +" p's in the string.");}
Nieoznaczona instrukcja kontynuuje pomija bieżącą iterację instrukcji for, while, do-while.
publicclassContinueWithLabelDemo{publicstaticvoid 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}}}
Oznaczona instrukcja kontynuuje pomijanie bieżącej iteracji zewnętrznej pętli oznaczonej podaną etykietą, jeśli javac i java demo, otrzymasz:
Mówiąc najprościej: break zakończy bieżącą pętlę i kontynuuje wykonywanie w pierwszej linii po zakończeniu pętli. Kontynuuj przeskakuje z powrotem do stanu pętli i kontynuuje działanie pętli.
Prosty program do zrozumienia różnicy między kontynuowaniem a przerwaniem
Kiedy continuejest używany
publicstaticvoid 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:HelloWorldStartFor loop i =0EndFor loop i =0StartFor loop i =1EndFor loop i =1StartFor loop i =2InsideifStatementfor i =2StartFor loop i =3EndFor loop i =3StartFor loop i =4EndFor loop i =4Completely out of For loop
Kiedy breakjest używany
publicstaticvoid 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:HelloWorldStartFor loop i =0EndFor loop i =0StartFor loop i =1EndFor loop i =1StartFor loop i =2InsideifStatementfor i =2Completely out of For loop
Kontynuuj Instrukcja zatrzymaj itrację i rozpocznij następną Przykład:
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 +"]");}
i instrukcja Break zatrzymuje pętlę lub wychodzi z pętli
więc jesteś w pętli for lub while. Korzystanie z przerwy; sprawi, że będziesz poza pętlą. Jak w, to się skończy. Kontyntynuj; powie, aby uruchomić następną iterację.
Nie ma sensu używać kontynuacji w instrukcji if, ale break; jest przydatny. W przypadku przełącznika ... zawsze używaj break; aby zakończyć sprawę, aby nie wykonała innej sprawy.
„Nie ma sensu używać instrukcji kontynuacji w if” - Tak, to ma sens. Na przykład po spełnieniu warunku można pominąć niektóre części przetwarzania w rzeczywistym kroku iteracji.
Sk8erPeter
Jest to nie tylko bezcelowe, ale nielegalne, chyba że ifznajduje się w pętli, w którym to przypadku jest wiele sensu.
Zobacz Instrukcje rozgałęziania, aby uzyskać więcej szczegółów i przykładów kodu:
break
continue
źródło
Doprowadzi to do następujących wyników:
Możesz opisać blok, nie tylko pętlę for, a następnie przerwać / kontynuować z bloku zagnieżdżonego do zewnętrznego. W kilku przypadkach może to być przydatne, ale ogólnie starasz się unikać takiego kodu, z tym wyjątkiem, że logika programu jest znacznie lepsza do zrozumienia niż w poniższym przykładzie:
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 wybierasz złośliwej nazwy, ale http: i podążaj za nią z komentarzem, który wygląda obco, jak adres internetowy w kodzie źródłowym:
To chyba z quizu Joshua Blocha. :)
źródło
http://stackoverflow.com/questions/462373/
pracy?Break całkowicie opuszcza pętlę i wykonuje instrukcje po pętli. Natomiast Continue pozostawia bieżącą iterację i wykonuje z następną wartością w pętli.
Wynik:
źródło
break
całkowicie wychodzi z pętli.continue
pomija instrukcje po instrukcji Kontynuuj i kontynuuje zapętlanie.źródło
Oświadczenie o złamaniu
Czasami konieczne jest wyjście z pętli, zanim pętla zakończy w pełni iterację wszystkich wartości kroku. Na przykład zapętlanie listy numerów, aż znajdziesz liczbę spełniającą określony warunek. Lub zapętlanie strumienia znaków z pliku, aż określony znak zostanie odczytany.
W poniższym przykładzie używamy prostej pętli for, aby wydrukować wartości od 0 do 9:
Wynik:
Teraz, jeśli dodamy instrukcję break, gdy i == 4, nasz kod wyrwie się z pętli, gdy i wyniesie 4. Możesz użyć instrukcji break do wyrwania się z pętli for, while i pętli do-while. Instrukcja break wyłamie się tylko z bieżącej pętli. Aby oderwać się od zewnętrznej pętli od zagnieżdżonej pętli wewnętrznej, należy użyć etykiet z instrukcją break.
Wynik:
Kontynuuj Instrukcja
Instrukcja kontynuacji Java 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ść kroku i oceni warunek logiczny przed przejściem do następnej iteracji. W poniższym przykładzie wypisujemy wszystkie wartości od 0 do 9 w pętli, ale pomijamy drukowanie 4.
Wynik:
Etykieta pętli - instrukcja Break Możesz używać etykiet w zagnieżdżonych pętlach , określając, gdzie chcesz kontynuować wykonywanie po zerwaniu z wewnętrznej pętli. Zwykle instrukcja break wyrwie się tylko z najbardziej wewnętrznej pętli, więc jeśli chcesz wyrwać się z zewnętrznej pętli, możesz użyć etykiet, aby to zrobić, zasadniczo robiąc coś podobnego do instrukcji goto.
Poniższy przykład wykorzystuje 3 pętle, wszystkie zagnieżdżone w sobie. Ponieważ nie ma możliwości całkowitego wyrwania się z najbardziej zewnętrznej pętli z wnętrza najbardziej wewnętrznej pętli, możemy użyć etykiety „outer1”, aby to osiągnąć i określić etykietę obok instrukcji break.
Wynik:
Zauważ, że ostatni wyświetlany wiersz to „ 0 [0]”, gdzie j == 3 i tam nazwaliśmy „break outer1;” wyrwać się z najbardziej zewnętrznej pętli.
Etykiety pętli - kontynuuj Instrukcja
Możesz także użyć etykiet ze słowem kluczowym kontynuuj, aby kontynuować zapętlanie od określonego punktu. Biorąc poprzedni przykład i po prostu zmieniając jedną linię, aby określić
continue outer1;
zamiastbreak outer1;
spowoduje, że pętla będzie kontynuować zapętlanie odouter1
etykiety zamiast wyłamywania się z pętli. Zwróć uwagę, jak za każdym razemcontinue outer1;
jest wywoływany, kod jest kontynuowany z zewnętrznej pętli po zwiększeniu indeksu i o 1.Źródło: Loops in Java - Ultimate Guide
źródło
Doskonała odpowiedź prosta i dokładna.
Dodałbym próbkę kodu.
źródło
A
break
wyniki oświadczenie na zakończenie rachunku, którego dotyczy (switch
,for
,do
, lubwhile
).continue
Oświadczenie jest używany do końca bieżącej iteracji pętli i zwrócić sterowanie do instrukcji pętli.źródło
continue
pomija bieżącą pętlę wykonawczą i PRZEJŚCIE do następnej pętli, natomiastbreak
WYJŚCIE z pętli i wykonuje następną instrukcję po pętli. Nauczyłem się różnicy za pomocą następującego kodu. Sprawdź różne wyniki. Mam nadzieję, że to pomoże.źródło
Rozważ następujące:
break powoduje zakończenie pętli, a wartość n wynosi 0.
Kontynuuj powoduje, że licznik programu powraca do pierwszego wiersza pętli (warunek jest sprawdzany, a wartość n jest przyrostem), a końcowa wartość n wynosi 10.
Należy również zauważyć, że przerwa tylko kończy wykonywanie pętli, w której się znajduje:
Wyprowadzi coś do efektu
źródło
Do
break
przerwy sprawozdanie z pętli (następna instrukcja do wykonania jest pierwszym po nawiasem zamykającym), natomiastcontinue
uruchamia pętlę przy następnej iteracji.źródło
break
Oświadczenie istnieje obecną strukturę pętli sterowania i skacze za nim, podczas gdycontinue
wychodzi zbyt ale skoki z powrotem do stanu pętli.źródło
Prosty przykład:
break
opuszcza pętlę.continue
wróci do uruchomienia pętli.źródło
Aby zapobiec wykonywaniu czegokolwiek, jeśli warunek jest spełniony, należy użyć kontynuacji i aby wyjść z pętli, jeśli warunek jest spełniony, należy użyć przerwy.
Na przykład w wymienionym poniżej kodzie.
Powyższy kod wyświetli wynik: 0 1 2 4
Teraz weź pod uwagę ten kod
Ten kod wydrukuje 0 1 2
To jest podstawowa różnica w kontynuacji i przerwie.
źródło
oto semantyczna przerwa:
oto semantyka kontynuacji:
źródło
Po pierwsze, myślę, że powinieneś wiedzieć, że istnieją dwa rodzaje przerw i kontynuuj w Javie, które są oznaczone jako przerwa, przerwa bez etykiety, oznaczone kontynuacja i kontynuacja bez etykiety. Teraz porozmawiam o różnicy między nimi.
Nieznakowana instrukcja break kończy wewnętrzny przełącznik dla instrukcji while, do-while.
Podział oznaczony etykietą kończy zewnętrzną instrukcję. Jeśli wykonasz javac i java to demo, otrzymasz:
Nieoznaczona instrukcja kontynuuje pomija bieżącą iterację instrukcji for, while, do-while.
Oznaczona instrukcja kontynuuje pomijanie bieżącej iteracji zewnętrznej pętli oznaczonej podaną etykietą, jeśli javac i java demo, otrzymasz:
jeśli masz jakieś pytanie, możesz zobaczyć samouczek Java tego: wprowadź opis linku tutaj
źródło
Mówiąc najprościej: break zakończy bieżącą pętlę i kontynuuje wykonywanie w pierwszej linii po zakończeniu pętli. Kontynuuj przeskakuje z powrotem do stanu pętli i kontynuuje działanie pętli.
źródło
wypróbuj ten kod w netbeans, zrozumiesz różnicę pomiędzy break i kontynuuj
źródło
Prosty program do zrozumienia różnicy między kontynuowaniem a przerwaniem
Kiedy
continue
jest używanyKiedy
break
jest używanyźródło
Kontynuuj Instrukcja zatrzymaj itrację i rozpocznij następną Przykład:
i instrukcja Break zatrzymuje pętlę lub wychodzi z pętli
źródło
więc jesteś w pętli for lub while. Korzystanie z przerwy; sprawi, że będziesz poza pętlą. Jak w, to się skończy. Kontyntynuj; powie, aby uruchomić następną iterację.
Nie ma sensu używać kontynuacji w instrukcji if, ale break; jest przydatny. W przypadku przełącznika ... zawsze używaj break; aby zakończyć sprawę, aby nie wykonała innej sprawy.
źródło
if
znajduje się w pętli, w którym to przypadku jest wiele sensu.