Ответы:
break
выходит из цикла, continue
переходит к следующей итерации.
Посмотрите Ветвящиеся Заявления для получения дополнительной информации и примеров кода:
break
Оператор break имеет две формы: помеченный и немаркированный. Вы видели немаркированную форму в предыдущем обсуждении оператора switch. Вы также можете использовать немаркированный разрыв для завершения цикла for, while или do-while [...]
Оператор без метки прерывает самый внутренний переключатель for, while или do-while, но помеченный разрыв завершает внешнюю инструкцию.
continue
Оператор continue пропускает текущую итерацию цикла 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;
Я предполагаю, что это от насмешки Джошуа Блоха. :)
http://stackoverflow.com/questions/462373/
работа?
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
Перерыв Заявление
Иногда необходимо выйти из цикла до того, как цикл завершит полную итерацию по всем значениям шага. Например, перебирая список чисел, пока не найдете число, удовлетворяющее определенному условию. Или цикл по потоку символов из файла, пока не будет прочитан определенный символ.
В следующем примере мы используем простой цикл 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, наш код выйдет из цикла, как только я равняюсь 4. Вы можете использовать оператор break для выхода из циклов for, while и циклов do-while. Оператор break будет выходить только из текущего цикла. Чтобы выйти из внешнего цикла из вложенного внутреннего цикла, вам необходимо использовать метки с оператором break.
for(int i=0; i<10; i++) {
System.out.println(i);
if(i==4) {
break;
}
}
Вывод:
0
1
2
3
4
Продолжить заявление
Оператор continue Java пропускает текущую итерацию цикла и переходит непосредственно к следующей итерации. После вызова оператора 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 Вы можете использовать метки во вложенных циклах оператор , указав, где вы хотите продолжить выполнение после выхода из внутреннего цикла. Обычно оператор 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][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0]
Обратите внимание, что последняя отображаемая строка имеет вид « 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]
Источник: циклы в Java - полное руководство
Отличный ответ простой и точный.
Я бы добавил пример кода.
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
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);
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);
Будет выводить что-то с эффектом
0
0
0
0
0
5
В break
заявлении прорывается из цикла (следующий оператор , чтобы быть выполнены является первым после закрывающей скобки), в то время как continue
начинается петля над на следующей итерации.
Простой пример:
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
Чтобы предотвратить выполнение чего-либо, если условие выполнено, следует использовать продолжение, а для выхода из цикла, если условие выполнено, следует использовать разрыв.
Например, в приведенном ниже коде.
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:;
}
Во-первых, я думаю, вы должны знать, что в Java есть два типа разрыва и продолжения, которые помечены как разрыв, немаркированный разрыв, помеченный как продолжение и непомеченный продолжение. Теперь я расскажу о разнице между ними.
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, 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 прервет текущий цикл и продолжит выполнение на первой строке после завершения цикла. continue переходит обратно в состояние цикла и продолжает работу цикла.
Простая программа, чтобы понять разницу между продолжением и разрывом
Когда 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
Продолжить задание остановить итерацию и начать следующую итерацию Пример:
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
не находится внутри цикла, и в этом случае есть много точки.