Обратите внимание, что Java также содержит помеченные операторы continue / break, которые имеют различную семантику :-)
Jay
4
Это всего лишь основы перерыва и продолжения. Для лучшего объяснения, посмотрите на сообщение Джея
Xn0vv3r
1
Для тех, кто интересуется, чтобы использовать метку, вы пишете название метки с последующим «:» перед циклом.
Caelum
«break» также прервет оператор switch
samsamara
1
продолжит переход к следующей итерации, даже если он находится в операторе if else внутри каждого цикла?
сцепление
102
Посмотрите Ветвящиеся Заявления для получения дополнительной информации и примеров кода:
break
Оператор break имеет две формы: помеченный и немаркированный. Вы видели немаркированную форму в предыдущем обсуждении оператора switch. Вы также можете использовать немаркированный разрыв для завершения цикла for, while или do-while [...]
Оператор без метки прерывает самый внутренний переключатель for, while или do-while, но помеченный разрыв завершает внешнюю инструкцию.
continue
Оператор continue пропускает текущую итерацию цикла for, while или do-while. Немеченая форма пропускается до конца тела самого внутреннего цикла и оценивает логическое выражение, которое управляет циклом. [...]
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");
Это приведет к следующему выводу:
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/462373for(int i =0; i <4;++i){if(i ==2)break http;
Я предполагаю, что это от насмешки Джошуа Блоха. :)
Отличная идея с омрачением, разве не просто http://stackoverflow.com/questions/462373/работа?
Caelum
@ user2104648: да, это, должно быть, ошибка вставки 'n'.
пользователь неизвестен
28
Break полностью покидает цикл и выполняет операторы после цикла. Принимая во внимание, что Continue оставляет текущую итерацию и выполняется со следующим значением в цикле.
Иногда необходимо выйти из цикла до того, как цикл завершит полную итерацию по всем значениям шага. Например, перебирая список чисел, пока не найдете число, удовлетворяющее определенному условию. Или цикл по потоку символов из файла, пока не будет прочитан определенный символ.
В следующем примере мы используем простой цикл for для вывода значений от 0 до 9:
for(int i=0; i<10; i++){System.out.println(i);}
Вывод:
0123456789
Теперь, если мы добавим оператор break, когда i == 4, наш код выйдет из цикла, как только я равняюсь 4. Вы можете использовать оператор break для выхода из циклов for, while и циклов do-while. Оператор break будет выходить только из текущего цикла. Чтобы выйти из внешнего цикла из вложенного внутреннего цикла, вам необходимо использовать метки с оператором break.
Оператор continue Java пропускает текущую итерацию цикла и переходит непосредственно к следующей итерации. После вызова оператора continue в цикле for выполнение цикла выполнит значение шага и оценит логическое условие, прежде чем перейти к следующей итерации. В следующем примере мы распечатываем все значения от 0 до 9 в цикле, но пропускаем печать 4.
01235<---- SKIPPED OVER 4 and continued with next loop iteration
6789
Loop Label - Break Break
Вы можете использовать метки во вложенных циклах оператор , указав, где вы хотите продолжить выполнение после выхода из внутреннего цикла. Обычно оператор break будет выходить только из самого внутреннего цикла, поэтому, когда вы хотите выйти из внешнего цикла, вы можете использовать метки для достижения этой цели, по сути, делая что-то похожее на оператор goto.
В следующем примере используются 3 цикла, все они вложены друг в друга. Поскольку нет никакого способа полностью выйти из самого внешнего цикла изнутри самого внутреннего цикла, мы можем использовать метку «external1» для выполнения этого и указать метку рядом с оператором 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]», где j == 3, и именно здесь мы назвали «break external1;» вырваться из внешней петли.
Loop Labels - Продолжить заявление
Вы также можете использовать метки с ключевым словом 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]
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
continueпропускает ток , выполняющий цикл и переходит к следующему цикла , тогда breakвыходит из цикла и выполняет следующий оператор после цикла. Я узнал разницу, используя следующий код. Проверьте различные выводы. Надеюсь, это поможет.
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 приводит к завершению цикла, и значение n равно 0.
int n;for(n =0; n <10;++n){continue;}System.out.println(n);
продолжение заставляет счетчик программы вернуться к первой строке цикла (условие проверяется, а значение n - это приращение) и конечное значение n равно 10.
Также следует отметить, что break только завершает выполнение цикла, в котором он находится:
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);
У вас есть переменные проблемы с областями видимости в ваших примерах.
Даррон
3
В breakзаявлении прорывается из цикла (следующий оператор , чтобы быть выполнены является первым после закрывающей скобки), в то время как continueначинается петля над на следующей итерации.
breakУтверждение существует текущую структуру управления сквозного и прыгает за ним в то время как continueвыходы тоже , но прыгает обратно в обхвате состояния.
Чтобы предотвратить выполнение чего-либо, если условие выполнено, следует использовать продолжение, а для выхода из цикла, если условие выполнено, следует использовать разрыв.
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:;
вот семантика продолжения:
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:;}
У C # нет перерыва; и продолжить; заявления? Я не могу в это поверить.
OscarRyz
Да, C # есть, я просто объясняю семантику break и продолжаю :-)
Michael Buen
1
Вы ничего не объясняете, вы только что опубликовали код. Даже не прокомментированный код. Кусок кода не является объяснением или «семантикой».
маркиз Лорн
1
Во-первых, я думаю, вы должны знать, что в Java есть два типа разрыва и продолжения, которые помечены как разрыв, немаркированный разрыв, помеченный как продолжение и непомеченный продолжение. Теперь я расскажу о разнице между ними.
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");}}
Незамеченный оператор break завершает самый внутренний переключатель для оператора while, 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.}}}
Помеченный разрыв завершает внешнюю инструкцию. Если вы javac и java в этой демонстрации, вы получите:
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.");}
Непомеченный оператор continue пропускает текущую итерацию оператора 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}}}
Помеченный оператор continue пропускает текущую итерацию внешнего цикла, помеченного данной меткой, если вы javac и java демо, вы получите:
Проще говоря: break прервет текущий цикл и продолжит выполнение на первой строке после завершения цикла. continue переходит обратно в состояние цикла и продолжает работу цикла.
Простая программа, чтобы понять разницу между продолжением и разрывом
Когда continueиспользуется
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
Когда breakиспользуется
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
Продолжить задание остановить итерацию и начать следующую итерацию Пример:
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 +"]");}
и Break Statment остановить цикл или выйти из цикла
так что вы внутри цикла for или while. Используя перерыв; поставит вас за пределы петли. Как и в, это закончится. Продолжать; скажет ему запустить следующую итерацию.
Нет смысла использовать продолжить в операторе if, но перерыв; является полезным. В случае switch ... всегда используйте break; чтобы завершить дело, чтобы он не выполнял другое дело.
«Нет смысла использовать продолжение в операторе if» - да, это имеет смысл. Например, когда условие выполнено, вы можете пропустить некоторые части обработки на действительном шаге итерации.
Sk8erPeter
Это не только бессмысленно , но незаконно, еслиif не находится внутри цикла, и в этом случае есть много точки.
Посмотрите Ветвящиеся Заявления для получения дополнительной информации и примеров кода:
break
continue
источник
Это приведет к следующему выводу:
Вы можете пометить блок, а не только цикл for, а затем разорвать / продолжить переход от вложенного блока к внешнему. В некоторых случаях это может быть полезно, но в целом вы будете стараться избегать такого кода, за исключением того, что логику программы гораздо лучше понять, чем в следующем примере:
Потому что это возможно, это не значит, что вы должны его использовать.
Если вы хотите смешным образом запутать свой код, вы выбираете не значимое имя, а http: и сопровождаете его комментарием, который выглядит чуждо, как веб-адрес в исходном коде:
Я предполагаю, что это от насмешки Джошуа Блоха. :)
источник
http://stackoverflow.com/questions/462373/
работа?Break полностью покидает цикл и выполняет операторы после цикла. Принимая во внимание, что Continue оставляет текущую итерацию и выполняется со следующим значением в цикле.
Вывод:
источник
break
полностью выходит из цикла.continue
пропускает операторы после оператора continue и продолжает цикл.источник
Перерыв Заявление
Иногда необходимо выйти из цикла до того, как цикл завершит полную итерацию по всем значениям шага. Например, перебирая список чисел, пока не найдете число, удовлетворяющее определенному условию. Или цикл по потоку символов из файла, пока не будет прочитан определенный символ.
В следующем примере мы используем простой цикл for для вывода значений от 0 до 9:
Вывод:
Теперь, если мы добавим оператор break, когда i == 4, наш код выйдет из цикла, как только я равняюсь 4. Вы можете использовать оператор break для выхода из циклов for, while и циклов do-while. Оператор break будет выходить только из текущего цикла. Чтобы выйти из внешнего цикла из вложенного внутреннего цикла, вам необходимо использовать метки с оператором break.
Вывод:
Продолжить заявление
Оператор continue Java пропускает текущую итерацию цикла и переходит непосредственно к следующей итерации. После вызова оператора continue в цикле for выполнение цикла выполнит значение шага и оценит логическое условие, прежде чем перейти к следующей итерации. В следующем примере мы распечатываем все значения от 0 до 9 в цикле, но пропускаем печать 4.
Вывод:
Loop Label - Break Break Вы можете использовать метки во вложенных циклах оператор , указав, где вы хотите продолжить выполнение после выхода из внутреннего цикла. Обычно оператор break будет выходить только из самого внутреннего цикла, поэтому, когда вы хотите выйти из внешнего цикла, вы можете использовать метки для достижения этой цели, по сути, делая что-то похожее на оператор goto.
В следующем примере используются 3 цикла, все они вложены друг в друга. Поскольку нет никакого способа полностью выйти из самого внешнего цикла изнутри самого внутреннего цикла, мы можем использовать метку «external1» для выполнения этого и указать метку рядом с оператором break.
Вывод:
Обратите внимание, что последняя отображаемая строка имеет вид « 0 [0]», где j == 3, и именно здесь мы назвали «break external1;» вырваться из внешней петли.
Loop Labels - Продолжить заявление
Вы также можете использовать метки с ключевым словом continue для продолжения цикла с определенной точки. Взяв предыдущий пример и просто изменив одну строку для указания
continue outer1;
вместо,break outer1;
вы заставите цикл продолжать цикл сouter1
метки вместо выхода из цикла. Обратите внимание, что каждый раз, когдаcontinue outer1;
вызывается, код продолжается из внешнего цикла после увеличения индекса цикла i на 1.Источник: циклы в Java - полное руководство
источник
Отличный ответ простой и точный.
Я бы добавил пример кода.
источник
А
break
заявление приводит к прекращению заявления , к которому он относится (switch
,for
,do
илиwhile
).continue
Заявление используются для завершения текущей итерации цикла и возвращает управление оператором цикла.источник
continue
пропускает ток , выполняющий цикл и переходит к следующему цикла , тогдаbreak
выходит из цикла и выполняет следующий оператор после цикла. Я узнал разницу, используя следующий код. Проверьте различные выводы. Надеюсь, это поможет.источник
Учтите следующее:
break приводит к завершению цикла, и значение n равно 0.
продолжение заставляет счетчик программы вернуться к первой строке цикла (условие проверяется, а значение n - это приращение) и конечное значение n равно 10.
Также следует отметить, что break только завершает выполнение цикла, в котором он находится:
Будет выводить что-то с эффектом
источник
В
break
заявлении прорывается из цикла (следующий оператор , чтобы быть выполнены является первым после закрывающей скобки), в то время какcontinue
начинается петля над на следующей итерации.источник
break
Утверждение существует текущую структуру управления сквозного и прыгает за ним в то время какcontinue
выходы тоже , но прыгает обратно в обхвате состояния.источник
Простой пример:
break
выходит из цикла.continue
вернусь к началу цикла.источник
Чтобы предотвратить выполнение чего-либо, если условие выполнено, следует использовать продолжение, а для выхода из цикла, если условие выполнено, следует использовать разрыв.
Например, в приведенном ниже коде.
Приведенный выше код напечатает результат: 0 1 2 4
Теперь рассмотрим этот код
Этот код напечатает 0 1 2
В этом основная разница в продолжении и разрыве.
источник
вот семантика разрыва:
вот семантика продолжения:
источник
Во-первых, я думаю, вы должны знать, что в Java есть два типа разрыва и продолжения, которые помечены как разрыв, немаркированный разрыв, помеченный как продолжение и непомеченный продолжение. Теперь я расскажу о разнице между ними.
Незамеченный оператор break завершает самый внутренний переключатель для оператора while, while.
Помеченный разрыв завершает внешнюю инструкцию. Если вы javac и java в этой демонстрации, вы получите:
Непомеченный оператор continue пропускает текущую итерацию оператора for, while, do-while.
Помеченный оператор continue пропускает текущую итерацию внешнего цикла, помеченного данной меткой, если вы javac и java демо, вы получите:
если у вас есть какие-либо вопросы, вы можете посмотреть учебник по Java этого: введите описание ссылки здесь
источник
Проще говоря: break прервет текущий цикл и продолжит выполнение на первой строке после завершения цикла. continue переходит обратно в состояние цикла и продолжает работу цикла.
источник
попробуйте этот код в netbeans, вы поймете разницу между перерывом и продолжением
источник
Простая программа, чтобы понять разницу между продолжением и разрывом
Когда
continue
используетсяКогда
break
используетсяисточник
Продолжить задание остановить итерацию и начать следующую итерацию Пример:
и Break Statment остановить цикл или выйти из цикла
источник
так что вы внутри цикла for или while. Используя перерыв; поставит вас за пределы петли. Как и в, это закончится. Продолжать; скажет ему запустить следующую итерацию.
Нет смысла использовать продолжить в операторе if, но перерыв; является полезным. В случае switch ... всегда используйте break; чтобы завершить дело, чтобы он не выполнял другое дело.
источник
if
не находится внутри цикла, и в этом случае есть много точки.