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

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

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


답변

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;


답변

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

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

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


답변

예를 보자.

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

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


답변

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

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

홀수 만 출력됩니다.


답변

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

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

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

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

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


답변

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

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

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

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


답변

이미 언급했듯이 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 %의 홀수 만 포함 된다면 … 잘못된 것입니다!