답변:
세부 사항 및 코드 샘플 은 분기 명령문 을 참조하십시오.
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 퀴즈에서 온 것 같아요. :)
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
이제 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
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
다음을 고려하세요:
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
루프를 떠납니다.
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
조건이 충족되는 경우 실행을 방지하려면 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를 인쇄합니다
이것이 계속과 중단의 기본적인 차이점입니다.
휴식의 의미는 다음과 같습니다.
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:;
}
먼저, 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
당신은 질문이있는 경우, 당신은 이것의 자바 튜토리얼을 볼 수 있습니다 : 여기에 링크 설명을 입력하십시오
간단히 말해 : 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
그래서 당신은 for 또는 while 루프 안에 있습니다. 휴식 사용; 루프 외부에 당신을 넣어 것입니다. 마찬가지로 끝납니다. 계속하다; 다음 반복을 실행하도록 지시합니다.
if 문에서 계속 사용할 점은 없지만 중단하십시오. 유용합니다. switch ... case에서 항상 break를 사용하십시오. 사례를 끝내기 위해 다른 사례를 실행하지 않습니다.
if
점의 많음이있는 경우에 루프, 내부.