break 문과 continue 문의 차이점


266

누구든지 breakcontinue진술 의 차이점을 말해 줄 수 있습니까 ?

답변:


530

break루프를 남기고 continue다음 반복으로 넘어갑니다.


3
Java에는 의미가 다른 레이블 된 continue / break 문도 포함되어 있습니다.
Jay

4
이것은 휴식의 기초 일 뿐이며 계속됩니다. 자세한 설명은 Jay 's Post
Xn0vv3r

1
궁금한 점이 있으면 레이블을 사용하려면 루프 앞에 레이블 이름과 ':'을 씁니다.
Caelum

"break"는 switch 문도 종료합니다
samsamara

1
각 루프마다 if else 문에 있더라도 다음 반복으로 계속 뛰어 넘습니까?
klutch

102

세부 사항 및 코드 샘플 은 분기 명령문 을 참조하십시오.

break

break 문에는 레이블과 레이블이없는 두 가지 형식이 있습니다. switch 문에 대한 이전 논의에서 레이블이없는 양식을 보았습니다. 또한 레이블이없는 구분을 사용하여 for, while 또는 do-while 루프를 종료 할 수 있습니다. [...]

레이블이 지정되지 않은 break 문은 가장 안쪽 스위치, for, while 또는 do-while 문을 종료하지만 레이블이있는 break는 외부 명령문을 종료합니다.

continue

continue 문은 for, while 또는 do-while 루프의 현재 반복을 건너 뜁니다. 레이블이없는 형식은 가장 안쪽의 루프 본문 끝으로 건너 뛰고 루프를 제어하는 ​​부울 식을 평가합니다. [...]

레이블이있는 continue 문은 주어진 레이블로 표시된 외부 루프의 현재 반복을 건너 뜁니다.


66
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 :를 선택하고 소스 코드의 webadress와 같이 외계인처럼 보이는 주석으로 따르십시오.

http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i) 
{
     if (i == 2) 
         break http;

나는 이것이 Joshua Bloch 퀴즈에서 온 것 같아요. :)


1
난독 화에 대한 좋은 생각, http://stackoverflow.com/questions/462373/너무 일 하지 않았을까요 ?
Caelum

@ user2104648 : 예, 잘라 내기 'n'붙여 넣기 오류 여야합니다.
사용자가 알 수 없음

28

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

24

break루프를 완전히 종료합니다. continuecontinue 문 뒤의 명령문을 건너 뛰고 계속 반복됩니다.


12

손익 계산서

때로는 것이 필요 루프 종료 루프가 완전히 모든 단계의 값을 통해 반복 완료하기 전에합니다. 예를 들어 특정 조건을 만족하는 숫자를 찾을 때까지 숫자 목록을 반복합니다. 또는 특정 문자를 읽을 때까지 파일에서 문자 스트림을 반복합니다.

다음 예제에서는 간단한 for 루프를 사용하여 0에서 9 사이의 값을 인쇄합니다.

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

산출:

0
1
2
3
4
5
6
7
8
9

이제 i == 4 일 때 break 문을 추가하면 코드가 i와 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

계속 진술

Java의 continue 문 은 루프의 현재 반복을 건너 뛰고 다음 반복으로 직접 이동합니다. for 루프에서 continue 문을 호출 한 후 루프 실행은 다음 반복을 진행하기 전에 단계 값을 실행하고 부울 조건을 평가합니다. 다음 예에서는 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

루프 라벨-Break Statement 사용 가능 내부 루프에서 벗어난 후 실행을 계속할 위치를 지정하여 중첩 루프 내에서 레이블 . 일반적으로 break 문은 가장 안쪽의 루프에서만 나옵니다. 따라서 외부 루프에서 벗어나려면 레이블을 사용하여 기본적으로 goto 문과 유사한 작업을 수행 할 수 있습니다.

다음 예제는 서로 중첩 된 3 개의 루프를 사용합니다. 내부 최상위 루프 내부에서 외부 최상위 루프를 완전히 분리 할 수있는 방법이 없으므로“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이며 "break outer1;"이라고합니다. 가장 바깥 쪽 루프에서 빠져 나옵니다.

루프 라벨-Continue 문

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


7

훌륭한 답변간단하고 정확한 .

코드 샘플을 추가하겠습니다.

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

6

break이 적용되는 문장의 종료에 문 결과 ( switch, for, do, 또는 while).

continue문은 현재 루프 반복을 종료하고 루프 문으로 제어를 반환하는 데 사용됩니다.


5

continue현재 실행 스킵 루프로 이동하여 다음 루프 반면 break MOVES OUT루프를 , 다음 명령문을 실행 한 후 루프. 다음 코드를 사용하여 차이점을 배웠습니다. 다른 출력을 확인하십시오.

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

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

1
예제에서 변수 범위 지정 문제가 있습니다.
Darron

3

break루프 밖으로 문 나누기, (실행되는 다음 문을 닫는 중괄호 후 처음이다)하면서 continue시작 다음 반복에 걸쳐 루프.


2

break명령문은 현재 루핑 제어 구조로 존재하며 continue종료도 반복하지만 루핑 조건으로 다시 점프 하는 동안 뒤에 점프합니다.


2

간단한 예 :

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

2

조건이 충족되는 경우 실행을 방지하려면 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를 인쇄합니다

이것이 계속과 중단의 기본적인 차이점입니다.


1

휴식의 의미는 다음과 같습니다.

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

다음은 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:;
}

C #은 중단되지 않습니다. 그리고 계속; 진술? 믿을 수가 없어
OscarRyz

그래 C #, 난 그냥 휴식의 의미를 설명하고 계속 :-)
마이클 Buen

1
아무것도 설명하지 않고 코드를 게시했습니다. 주석이 달린 코드조차도 없습니다. 코드 조각은 설명이나 '의미 적'이 아닙니다.
Lorne의 후작

1

먼저, break, unlabeled break, labeled continue 및 unlabeled continue라는 두 가지 유형의 중단이 있고 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 문은 가장 안쪽 스위치, for, 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 - 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 문은 주어진 lable로 표시된 외부 루프의 현재 반복을 건너 뜁니다. 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

당신은 질문이있는 경우, 당신은 이것의 자바 튜토리얼을 볼 수 있습니다 : 여기에 링크 설명을 입력하십시오


0

간단히 말해 : break는 현재 루프를 종료하고 루프가 끝난 후 첫 번째 라인에서 실행을 계속합니다. continue 루프 조건으로 되돌아가 루프를 계속 실행합니다.


루프 후 첫 번째 문장 에서.
Lorne의 후작

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

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

netbeans 에서이 코드를 시도하면 중단과 계속의 차이점을 이해할 수 있습니다.

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

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

0

계속과 중단의 차이점을 이해하는 간단한 프로그램

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

0

Statment 계속 반복을 중지하고 다음 반복을 시작합니다. 예 :

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

및 Stat Statment는 루프를 중지하거나 루프에서 종료합니다


-1

그래서 당신은 for 또는 while 루프 안에 있습니다. 휴식 사용; 루프 외부에 당신을 넣어 것입니다. 마찬가지로 끝납니다. 계속하다; 다음 반복을 실행하도록 지시합니다.

if 문에서 계속 사용할 점은 없지만 중단하십시오. 유용합니다. switch ... case에서 항상 break를 사용하십시오. 사례를 끝내기 위해 다른 사례를 실행하지 않습니다.


1
"if 문에서 계속 사용하는 데 아무런 의미가 없습니다" -예. 예를 들어, 조건이 충족되면 실제 반복 단계에서 일부 처리 파트를 건너 뛸 수 있습니다.
Sk8erPeter

그것은 무의미하지만, 불법뿐만 아니라 하지 않는 한 (가) if점의 많음이있는 경우에 루프, 내부.
Lorne의 후작 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.