자바 루프
프로그래밍의 루프를 사용하면 일련의 명령이 조건에 따라 여러 번 실행될 수 있습니다. Java에는 아래에 설명된 세 가지 유형의 루프가 있습니다.
1. for 루프
for 루프는 반복 횟수를 알 때 사용됩니다(작업을 몇 번 반복할지 알고 있음). for 문에는 초기화 조건과 증가/감소가 한 줄에 포함됩니다.
예: 아래 Java 프로그램은 한 줄에 0부터 10까지의 숫자를 인쇄하는 for 루프를 보여줍니다.
Java // Java program to demonstrates the working of for loop import java.io.* ; class Geeks { public static void main ( String [] args ) { for ( int i = 0 ; i <= 10 ; i ++ ) { System . out . print ( i + ' ' ); } } }
산출
0 1 2 3 4 5 6 7 8 9 10
통사론:
for (초기화; 조건; 증가/감소) {
//실행할 코드
}
아래 이미지는 for 루프의 순서도를 보여줍니다.
for 루프의 흐름도 - 초기화 조건 : 여기서는 사용 중인 변수를 초기화합니다. for 루프의 시작을 표시합니다. 이미 선언된 변수를 사용할 수도 있고 변수를 로컬로 선언하여 루프 전용으로 사용할 수도 있습니다.
- 테스트 조건: 루프의 종료 조건을 테스트하는 데 사용됩니다. 부울 값을 반환해야 합니다. 루프 문을 실행하기 전에 조건을 확인하므로 진입 제어 루프이기도 합니다.
- 명령문 실행 : 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다.
- 증가/감소 : 다음 반복을 위해 변수를 업데이트하는 데 사용됩니다.
- 루프 종료 :조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.
메모 : 다음과 같은 또 다른 형태의 for 루프가 있습니다. 향상된 for 루프 또는 (각 루프마다).
향상된 for 루프(각각)
이 루프는 배열이나 컬렉션을 반복하는 데 사용됩니다.
예 : 아래 Java 프로그램은 배열을 반복하고 이름을 인쇄하는 향상된 for 루프(각 루프에 대해)를 보여줍니다.
Java // Java program to demonstrate // the working of for each loop import java.io.* ; class Geeks { public static void main ( String [] args ) { String [] names = { 'Sweta' 'Gudly' 'Amiya' }; for ( String name : names ) { System . out . println ( 'Name: ' + name ); } } }
산출
Name: Sweta Name: Gudly Name: Amiya
통사론:
for (dataType 변수 : arrayOrCollection) {
//실행할 코드
}
2. while 루프
while 루프는 루프 본문을 실행하기 전에 조건을 확인하고 싶을 때 사용됩니다.
예: 아래 Java 프로그램은 한 줄에 0부터 10까지의 숫자를 인쇄하는 while 루프를 보여줍니다.
Java // Java program to demonstrates // the working of while loop import java.io.* ; class Geeks { public static void main ( String [] args ) { int i = 0 ; while ( i <= 10 ) { System . out . print ( i + ' ' ); i ++ ; } } }
산출
0 1 2 3 4 5 6 7 8 9 10
통사론:
동안(조건) {
//실행할 코드
}
아래 이미지는 while 루프의 흐름도를 보여줍니다.
while 루프의 흐름도 - While 루프는 부울 조건을 확인하면서 시작됩니다. true로 평가되면 루프 본문 문이 실행되고 그렇지 않으면 루프 다음의 첫 번째 문이 실행됩니다. 이러한 이유로 진입 제어 루프라고도 합니다.
- 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다. 일반적으로 명령문에는 다음 반복을 위해 처리되는 변수에 대한 업데이트 값이 포함됩니다.
- 조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.
3. do-while 루프
do-while 루프는 코드 블록이 실행되도록 보장합니다. 적어도 한 번은 상태를 확인하기 전에
예 : 아래 Java 프로그램은 한 줄에 0부터 10까지의 숫자를 인쇄하는 do-while 루프를 보여줍니다.
Java // Java program to demonstrates // the working of do-while loop import java.io.* ; class Geeks { public static void main ( String [] args ) { int i = 0 ; do { System . out . print ( i + ' ' ); i ++ ; } while ( i <= 10 ); } }
산출
0 1 2 3 4 5 6 7 8 9 10
통사론:
하다 {
//실행할 코드
} while(조건);
아래 이미지는 do-while 루프의 흐름도를 보여줍니다.
do-while 루프의 흐름도 - do while 루프는 명령문 실행과 함께 시작됩니다. 처음에는 어떤 조건도 확인하지 않습니다.
- 명령문을 실행하고 변수 값을 업데이트한 후 조건의 참 또는 거짓 값이 확인됩니다. true로 평가되면 루프의 다음 반복이 시작됩니다.
- 조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.
- do-while 루프는 조건을 확인하기 전에 해당 명령문을 최소한 한 번 실행하므로 종료 제어 루프의 예라는 점에 유의하는 것이 중요합니다.
일반적인 루프 실수와 이를 방지하는 방법
루프가 올바르게 사용되지 않으면 코드 성능 가독성과 기능에 영향을 미치는 함정과 버그가 발생할 수 있습니다. 다음은 루프의 몇 가지 일반적인 함정입니다.
1. 무한 루프
이것은 모든 종류의 루핑을 구현할 때 가장 흔한 실수 중 하나입니다. 루프가 무한 시간 동안 실행되기 때문에 종료되지 않을 수 있다는 것입니다. 어떤 이유로 조건이 실패할 때 발생합니다.
무한 루프의 유형:
- 무한 for 루프
- 무한 while 루프
예: 여기서 두 예제 모두 무한 루프를 보여줍니다.
Infinite For Loop // Java program to demonstrate // the infinite for loop import java.io.* ; class Geeks { public static void main ( String [] args ) { for ( int i = 0 ; i < 5 ; i -- ) { System . out . println ( 'This loop will run forever' ); } } }
Infinite While Loop // Java Program to demonstrate // the infinite while loop import java.io.* ; class Geeks { public static void main ( String [] args ) { while ( true ) { System . out . println ( 'Basic example of infinte loop' ); } } }
산출: 위 코드를 모두 실행하면 TLE(Time Limit Exceeded) 오류가 발생합니다.
2. 개별 오류
Off-by-One 오류는 루프가 원하는 것보다 한 번 더 또는 한 번 더 적게 실행될 때 발생합니다. 기본적으로 루프 조건이 올바르게 설정되지 않았을 때 발생합니다.
예 : 아래 Java 프로그램은 루프가 6번 실행되고 우리는 루프가 5번 실행될 것으로 예상하는 Off-by-One 오류를 보여줍니다.
Java // Java Program to demonstrates Off-by-One Errors import java.io.* ; class Geeks { public static void main ( String [] args ) { for ( int i = 0 ; i <= 5 ; i ++ ) { System . out . print ( i + ' ' ); } } }
3. 루프 내부에서 루프 변수 수정하기
루프 내에서 루프 조건(예: i)을 변경하면 루프가 특정 반복을 건너뛰거나 예상하지 못한 방식으로 동작할 수 있습니다. 이로 인해 오류나 예상치 못한 동작이 발생할 수 있습니다.
예 : 아래 Java 프로그램은 루프가 특정 반복을 건너뛰고 예기치 않게 동작하도록 하는 루프 내부의 루프 변수를 수정하는 방법을 보여줍니다.
Java // Java program demonstrates // modification in i variable import java.io.* ; class Geeks { public static void main ( String [] args ) { for ( int i = 0 ; i < 5 ; i ++ ) { if ( i == 2 ) { // Modifies the loop variable and skips // the next iteration i ++ ; } System . out . println ( i ); } } }
4. 빈 루프 본체
빈 루프 본문은 반복을 위해 루프를 작성했지만 루프 내부에서 어떤 작업도 수행하지 않을 때 발생합니다. 내부에 유용한 작업 없이 루프를 실행하면 혼란스러울 수 있습니다.
예: 아래 Java 프로그램은 빈 루프 본문을 보여줍니다.
Java // Java program to demonstrates Empty loop body import java.io.* ; class Geeks { public static void main ( String [] args ) { for ( int i = 0 ; i < 10 ; i ++ ) { // Empty body no operations } } }
루프 본문이 비어 있으므로 이에 대한 출력이 생성되지 않습니다.
요약표
| 루프 유형 | 사용 시기 | 상태 확인 | 한 번 이상 실행됩니까? |
|---|---|---|---|
| for 루프 | 정확한 반복을 원할 때 | 루프 본문 이전 항목 제어라고 합니다. | 아니요 |
| while 루프 | 먼저 상태 확인이 필요할 때. | 루프 본문 이전 항목 제어라고 합니다. | 아니요 |
| do-while 루프 | 한번쯤은 달려야 할 때 | 루프 본문 이후를 종료 제어라고 합니다. | 예 |
| for-each 루프 | 모든 수집항목을 처리하는 경우 | 내부적으로 처리 | 아니요 |
관련 게시물:
- for 루프
- while 루프
- do-while 루프