누구든지 break
와 continue
진술 의 차이점을 말해 줄 수 있습니까 ?
답변
break
루프를 남기고 continue
다음 반복으로 넘어갑니다.
답변
세부 사항 및 코드 샘플 은 분기 명령문 을 참조하십시오.
break
break 문에는 레이블과 레이블이없는 두 가지 형식이 있습니다. switch 문에 대한 이전 논의에서 레이블이없는 양식을 보았습니다. 또한 레이블이없는 구분을 사용하여 for, while 또는 do-while 루프를 종료 할 수 있습니다. […]
레이블이 지정되지 않은 break 문은 가장 안쪽 스위치, for, while 또는 do-while 문을 종료하지만 레이블이있는 break는 외부 명령문을 종료합니다.
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 :를 선택하고 소스 코드의 webadress와 같이 외계인처럼 보이는 주석으로 따르십시오.
http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i)
{
if (i == 2)
break http;
나는 이것이 Joshua Bloch 퀴즈에서 온 것 같아요. 🙂
답변
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
루프를 완전히 종료합니다. continuecontinue
문 뒤의 명령문을 건너 뛰고 계속 반복됩니다.
답변
손익 계산서
때로는 것이 필요 루프 종료 루프가 완전히 모든 단계의 값을 통해 반복 완료하기 전에합니다. 예를 들어 특정 조건을 만족하는 숫자를 찾을 때까지 숫자 목록을 반복합니다. 또는 특정 문자를 읽을 때까지 파일에서 문자 스트림을 반복합니다.
다음 예제에서는 간단한 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]
답변
훌륭한 답변간단하고 정확한 .
코드 샘플을 추가하겠습니다.
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