21 ответов:
посмотреть Операторы Ветвления для более подробной информации и примеров кода:
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 4Continue Оператор
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 9Loop 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 - 3class 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