프로그래밍 언어의 반복은 일부 조건이 true로 평가되는 동안 일련의 명령/함수를 반복적으로 실행하는 것을 용이하게 하는 기능입니다. Java는 루프를 실행하는 세 가지 방법을 제공합니다. 모든 방법은 유사한 기본 기능을 제공하지만 구문 및 조건 확인 시간이 다릅니다.
java는 세 가지 유형의 조건문을 제공합니다. 두 번째 유형은 루프 문입니다.
- while 루프: while 루프는 주어진 부울 조건에 따라 코드가 반복적으로 실행될 수 있도록 하는 제어 흐름 문입니다. while 루프는 if 문을 반복하는 것으로 생각할 수 있습니다.
구문:
while (boolean condition) { loop statements... }>
자바
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > while> (i<=> 10> )> > {> > System.out.println(i);> > i++;> > }> > }> }> |
>
>산출
0 1 2 3 4 5 6 7 8 9 10>
- 흐름도:
- While 루프는 부울 조건을 확인하면서 시작됩니다. true로 평가되면 루프 본문 문이 실행되고, 그렇지 않으면 루프 다음의 첫 번째 문이 실행됩니다. 이런 이유로 라고도 불린다. 진입 제어 루프
- 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다. 일반적으로 명령문에는 다음 반복을 위해 처리되는 변수에 대한 업데이트 값이 포함됩니다.
- 조건이 false가 되면 루프가 종료되어 수명 주기가 종료됩니다.
- for 루프: for 루프는 루프 구조를 작성하는 간결한 방법을 제공합니다. while 루프와 달리 for 문은 한 줄에서 초기화, 조건 및 증가/감소를 사용하므로 더 짧고 디버그하기 쉬운 루프 구조를 제공합니다.
통사론:
for (initialization condition; testing condition;increment/decrement) { statement(s) }>
자바
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i=> 0> ;i<=> 10> ;i++)> > {> > System.out.println(i);> > }> > }> }> |
>
>산출
배열 c의 문자열
0 1 2 3 4 5 6 7 8 9 10>
- 흐름도:
- 초기화 조건 : 사용중인 변수를 초기화합니다. for 루프의 시작을 표시합니다. 이미 선언된 변수를 사용하거나 변수를 선언할 수 있으며, 로컬에서는 루프에만 사용할 수 있습니다. 테스트 조건: 루프의 종료 조건을 테스트하는 데 사용됩니다. 부울 값을 반환해야 합니다. 그것은 또한 출입 통제 루프 루프 문을 실행하기 전에 조건을 확인하기 때문입니다. 명령문 실행: 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다. 증가/감소: 다음 반복을 위해 변수를 업데이트하는 데 사용됩니다. 루프 종료: 조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.
- 하는 동안: do while 루프는 while 루프와 유사하지만 명령문을 실행한 후 조건을 확인한다는 점만 다릅니다. 제어 루프를 종료합니다.
통사론:
do { statements.. } while (condition);>
자바
김프 배경 삭제
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > do> > {> > System.out.println(i);> > i++;> > }> while> (i<=> 10> );> > }> }> |
>
>산출
0 1 2 3 4 5 6 7 8 9 10>
- 흐름도:
- do while 루프는 명령문 실행으로 시작됩니다. 처음에는 어떤 조건도 확인하지 않습니다.
- 명령문을 실행하고 변수 값을 업데이트한 후 조건이 참인지 거짓인지 확인합니다. true로 평가되면 다음 루프 반복이 시작됩니다.
- 조건이 false가 되면 루프가 종료되어 수명 주기가 종료됩니다.
- do-while 루프는 조건을 확인하기 전에 해당 명령문을 한 번 이상 실행하므로 종료 제어 루프의 예라는 점에 유의하는 것이 중요합니다.
루프의 함정
- 무한 루프: 모든 종류의 루핑을 구현할 때 가장 흔히 저지르는 실수 중 하나는 종료되지 않을 수 있다는 것입니다. 즉, 루프가 무한 시간 동안 실행됩니다. 어떤 이유로 조건이 실패할 때 발생합니다. 예: 무한 for 루프:
자바
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > for> (;;) {> > }> > }> }> |
>
>
무한 while 루프:
자바
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > while> (> true> )> > {> > // statement> > }> > > }> }> |
테스트 유형
>
>
자바
//Java program to illustrate various pitfalls.> public> class> LooppitfallsDemo> {> > public> static> void> main(String[] args)> > {> > // infinite loop because condition is not apt> > // condition should have been i>0.> > for> (> int> i => 5> ; i !=> 0> ; i -=> 2> )> > {> > System.out.println(i);> > }> > int> x => 5> ;> > // infinite loop because update statement> > // is not provided.> > while> (x ==> 5> )> > {> > System.out.println('In the loop');> > }> > }> }> |
>
>
또 다른 함정은 루프를 통해 컬렉션 개체에 무언가를 추가할 수 있고 메모리가 부족할 수 있다는 것입니다. 아래 프로그램을 실행하려고 하면 잠시 후 메모리 부족 예외가 발생합니다.
자바
//Java program for out of memory exception.> import> java.util.ArrayList;> public> class> Integer1> {> > public> static> void> main(String[] args)> > {> > ArrayList ar => new> ArrayList();> > for> (> int> i => 0> ; i { ar.add(i); } } }> |
>
>
산출:
Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at article.Integer1.main(Integer1.java:9)>
중첩 루프:
중첩 루프는 다른 루프 문 안에 있는 루프 문을 의미합니다.
루프를 사용하여 다양한 조합이 있습니다. ~을 위한 고리, ~하는 동안 고리, 하는 동안 고리.
예제 1 중첩된 for 루프
자바
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i => 0> ; i <> 3> ; i++){> > for> (> int> j => 0> ; j <> 2> ; j++){> > System.out.println(i);> > }> > System.out.println();> > }> > }> }> |
>
>산출
0 0 1 1 2 2>
예제 2 중첩된 while 루프
자바
스위치 문 자바
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> i => 1> , j => 1> ;> > while> (i <=> 3> ) {> > while> (j <=> 3> ) {> > System.out.print(j);> > j++;> > }> > i++;> > System.out.println(> ''> );> > j => 1> ;> > }> > }> }> |
>
>산출
123 123 123>
예제 3 중첩된 do while 루프
자바
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> row => 1> , column => 1> ;> > int> x;> > do> {> > x => 4> ;> > do> {> > System.out.print(> ''> );> > x--;> > }> while> (x>= 행);> > column => 1> ;> > do> {> > System.out.print(column +> ' '> );> > column++;> > }> while> (column <=> 5> );> > System.out.println(> ' '> );> > row++;> > }> while> (row <=> 5> );> > }> }> |
>
.다음 자바
>산출
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5>
예제 4 중첩된 while 및 for 루프
자바
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> weeks => 3> ;> > int> days => 7> ;> > int> i => 1> ;> > // outer loop> > while> (i <= weeks) {> > System.out.println(> 'Week: '> + i);> > // inner loop> > for> (> int> j => 1> ; j <= days; ++j) {> > System.out.println(> ' Days: '> + j);> > }> > ++i;> > }> > }> }> |
>
>산출
Week: 1 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 2 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 3 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7>