“continue”키워드 란 무엇이며 Java에서 어떻게 작동합니까?


302

나는이 키워드를 처음 보았고 누군가가 나에게 그 기능을 설명 할 수 있는지 궁금합니다.

  • continue키워드 는 무엇입니까 ?
  • 어떻게 작동합니까?
  • 언제 사용됩니까?

답변:


416

continue레이블이없는 문은 조건이 가장 안쪽에서 다시 실행됩니다 while또는 do루프, 그리고 가장 안쪽의 업데이트 표현에서 for루프. 루프의 처리를 조기에 종료하여 깊은 if문장 을 피하는 데 종종 사용됩니다 . 다음 예제 continue에서는 루프에서 다음 명령문을 처리하지 않고 다음 행을 가져옵니다.

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

레이블을 사용 continue하면 가장 안쪽 루프가 아닌 해당 레이블이있는 루프에서 다시 실행됩니다. 이것은 깊게 중첩 된 루프를 피하거나 명확성을 위해 사용될 수 있습니다.

continue빈 루프 본문을 더 명확하게하기 위해 자리 표시 자로 사용되는 경우 도 있습니다.

for (count = 0; foo.moreData(); count++)
  continue;

C 및 C ++에는 레이블이없는 동일한 명령문도 있습니다. Perl의 해당 값은 next입니다.

이 유형의 제어 흐름은 권장되지 않지만, 원하는 경우 continue제한된 형식의 시뮬레이션에 사용할 수도 있습니다 goto. 다음 예제 continue에서 빈 for (;;)루프를 다시 실행합니다 .

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;

513

continue같은 종류입니다 goto. 익숙 break하십니까? 대조적으로 생각하는 것이 더 쉽습니다.

  • break 루프를 종료합니다 (아래 코드로 점프).

  • continue 현재 반복에 대한 루프 내에서 코드의 나머지 처리를 종료하지만 루프는 계속합니다.


1
휴식을위한 좋은 예와 내가 그것을> 전에 같은 줄 알았는데, 계속 <.
yfsx

그것을 완벽한 500으로 만들 수는 없습니다! +1
모자

100

예를 보자.

int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

이것은 1에서 100 사이의 홀수 만 합산합니다.


28

루프 본문을 서브 루틴으로 생각하면 continue일종의입니다 return. C에도 같은 키워드가 존재하며 같은 목적으로 사용됩니다. 다음은 좋은 예입니다.

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

홀수 만 출력됩니다.


16

일반적으로 continue(및 break)는 특히 or 루프 선언이 즉시 보이지 않는 경우 코드에서 일부 리팩토링을 사용할 있다는 경고로 간주합니다 . 메소드 중간에서도 마찬가지 이지만 약간 다른 이유가 있습니다.whileforreturn

다른 사람들이 이미 말했듯이, continue루프의 다음 반복으로 break이동 하면서 둘러싼 루프 밖으로 이동합니다.

컨텍스트와는 달리 continue/ break와 루프 사이에 즉각적인 링크가 없기 때문에 유지 보수 시한 폭탄 일 수 있습니다 . 내부 루프를 추가하거나 루프의 "guts"를 별도의 메소드로 이동하면 continue/ break실패 의 숨겨진 효과가 있습니다.

IMHO, 최후의 수단으로 사용하는 것이 가장 좋습니다. 그런 다음 루프의 시작 또는 끝에서 사용이 밀접하게 그룹화되어 다음 개발자가 한 화면에서 루프의 "바운드"를 볼 수 있도록하십시오. .

continue, breakreturn (귀하의 메소드 끝에있는 하나의 진정한 수익 이외)는 모두 "숨겨진 GOTO"의 일반 범주에 속합니다. 루프와 함수 제어를 예기치 않은 곳에 배치하여 결국 버그를 유발합니다.


반품이 나쁜 이유에 관심이 있습니다. 나는 이미 스칼라가 반품을 장려하지 않기 때문에 반품이 나쁘다는 느낌이 듭니다 .
Jus12

1
반면에 깊게 중첩 된 루프에서 메소드를 리턴하도록 허용하는 것은 루프 종료를보다 깨끗하게 보이기 위해 추가 변수를 작성하는 대신 작업을 수행 하는 가장 쉽고 가장 읽기 쉽고 가장 합리적인 방법 일 수 있습니다.
David R Tribble

5

Java에서 "continue"는 현재 루프의 끝으로 이동 함을 의미합니다. 컴파일러가 루프에서 계속을 볼 경우 다음 반복으로 이동 함을 의미합니다.

예 : 1에서 10까지 홀수를 인쇄하는 코드입니다.

컴파일러는 다음 반복으로 계속 진행될 때마다 인쇄 코드를 무시합니다.

for (int i = 0; i < 10; i++) { 
    if (i%2 == 0) continue;    
    System.out.println(i+"");
}


4

이미 언급했듯이 continue아래 코드를 처리하지 않고 루프가 끝날 때까지 처리하지 않습니다. 그런 다음 루프 조건으로 이동합니다 하고이 조건이 계속 유지되는 경우 (또는 표시된 루프 조건에 대한 플래그가있는 경우) 다음 반복을 실행하십시오.

do - while당신이 경우의 하단에있는 상태로 이동 하는 경우 강조 표시해야합니다continue루프 시작이 아니라 .

이것이 많은 사람들이 다음 코드가 생성하는 내용에 올바르게 대답하지 못하는 이유입니다.

    Random r = new Random();
    Set<Integer> aSet= new HashSet<Integer>();
    int anInt;
    do {
        anInt = r.nextInt(10);
        if (anInt % 2 == 0)
            continue;
        System.out.println(anInt);
    } while (aSet.add(anInt));
    System.out.println(aSet);

* 응답에 aSet100 %의 홀수 만 포함 된다면 ... 잘못된 것입니다!


4

계속키워드입니다 Java 이며 현재 반복을 건너 뛰는 데 사용됩니다.

1에서 100까지의 모든 홀수를 인쇄한다고 가정합니다.

public class Main {

    public static void main(String args[]) {

    //Program to print all odd numbers from 1 to 100

        for(int i=1 ; i<=100 ; i++) {
            if(i % 2 == 0) {
                continue;
            }
            System.out.println(i);
        }

    }
}

위 프로그램의 continue 문은 i 가 짝수 일 때 반복을 건너 뛰고 홀수 일 때 i 값을 인쇄합니다 .

Continue 문은 루프 내부의 나머지 명령문을 실행하지 않고 단순히 루프에서 빠져 나와 다음 반복을 트리거합니다.


3

다른 조건 인 경우를 고려하십시오. continue 문은 조건에있는 것을 실행하고 조건을 벗어나는 것, 즉 다음 반복 또는 조건으로 이동합니다. 그러나 휴식은 루프를 떠납니다. 다음 프로그램을 고려하십시오. '

public class ContinueBreak {
    public static void main(String[] args) {
        String[] table={"aa","bb","cc","dd"};
        for(String ss:table){
            if("bb".equals(ss)){
                continue;
            }
            System.out.println(ss);
            if("cc".equals(ss)){
                break;
            }
        }
        System.out.println("Out of the loop.");
    }

}

다음과 같이 인쇄됩니다 : aa cc 루프 외부.

continue (After if.) 대신 break를 사용하면 aa를 인쇄하고 루프를 벗어납니다 .

"bb"조건이 ss와 같으면 다음을 수행하십시오. 계속 : 다음 반복으로 이동합니다 (예 : "cc".equals (ss)). 중단의 경우 : 루프에서 나오고 "Out of the loop"를 인쇄합니다.


2
"cc"! = "bb"이후에 cc도 인쇄 할 것입니다. 인쇄 문은break
Ted Delezene의

2

나는 파티에 조금 늦었지만 ...

continue루프를 제어하는 ​​조건식에서 모든 작업이 수행되는 빈 루프에 유용하다는 점 은 언급 할 가치가 있습니다. 예를 들면 다음과 같습니다.

while ((buffer[i++] = readChar()) >= 0)
    continue;

이 경우 문자를 읽고 추가하는 모든 작업은 루프를 buffer제어하는 식에서 수행됩니다 while. 그만큼continue문 루프 본체를 필요로하지 않는 시각적 표시로서 기능한다.

동등한 것보다 조금 더 분명합니다.

while (...)
{ }

빈 문장을 사용하는 것보다 확실히 더 좋고 (보다 안전한) 코딩 스타일 :

while (...)
    ;

나는 그것이 더 깨끗하고 더 읽기 쉬운 코드라는 데 동의하지만, 다른 옵션보다 "더 안전하다"라는 주장을 따르지는 않을지 모르겠지만 while (statement); 세미콜론을 사용하여 직접 구분됩니다.
axolotl

@Aalok-고독한 세미콜론은 시각적으로 놓치기 쉽기 때문에 안전합니다. 우연히 빠져 나가는 것도 쉽습니다. 다음 문장 while이 본문의 본문이되고 while시각적으로 명확하지 않을 것입니다. 명시 continue적은 명백하며 빈 명령문이 의도하지 않은 의도를 전달합니다.
David R Tribble

알다시피, 당신은 주로 디자인 관점에서 의미합니다. 말이 되네요 루프의 구조를 염두에두고 뭔가 기초가있었습니다.
axolotl

1

기본적으로 Java에서 continue는 명령문입니다. 따라서 continue 문은 일반적으로 현재 반복을 건너 뛰기 위해 루프와 함께 사용됩니다.

Java에서 언제 어떻게 사용되는지는 아래 링크를 참조하십시오. 예를 들어 설명했습니다.

https://www.flowerbrackets.com/continue-java-example/

그것이 도움이되기를 바랍니다!


0

continue 루프 안에 있어야합니다. 그렇지 않으면 아래 오류가 표시됩니다.

루프 밖에서 계속


0

continue 문은 루프의 다음 반복으로 즉시 이동해야 할 때 루프 제어 구조에 사용됩니다.

for 루프 또는 while 루프와 함께 사용할 수 있습니다. Java continue 문은 루프를 계속하는 데 사용됩니다. 프로그램의 현재 흐름을 계속하고 지정된 조건에서 나머지 코드를 건너 뜁니다.

내부 루프의 경우 내부 루프 만 계속됩니다.

for 루프, while 루프 및 do-while 루프와 같은 모든 유형의 루프에서 Java continue 문을 사용할 수 있습니다.

예를 들어

class Example{
    public static void main(String args[]){
        System.out.println("Start");
        for(int i=0; i<10; i++){
            if(i==5){continue;}
            System.out.println("i : "+i);   
        }
        System.out.println("End.");
    }
}

산출:

Start
i : 0
i : 1
i : 2
i : 3
i : 4
i : 6
i : 7
i : 8
i : 9
End.

[5 번 건너 뛰기]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.