for문
for문은 반복 횟수를 알고 있을 때 적합하다. 구조가 조금 복잡하지만 직관적이라 오히려 이해가 쉽다.
코드를 한번 보자
for(int i=1; i<=5; i++) {
System.out.println("I can do it");
}
/*
for(int i=1; i<=5; i++)
int i=1; : 부터
i <= 5; : 5까지
i++; 씩 증가
*/
위의 for문은 블럭{} 내의 문장을 5번 반복한다. 즉 "I can do it"이라는 문장이 5번 출력된다.
for문의 구조와 수행순서
for문은 '초기화', '조건식', '증감식', '블럭{}', 모두 4부분으로 이루어져 있다
조건식이 true인 동안 블럭{} 내의 문장을 반복하다가 거짓이 되면 반복문을 벗어난다.
for (초기화;조건식;증감식) {
// 조건식이 true일 때 수행
}
초기화
반복문에서 사용될 변수를 초기화하는 부분, 처음에 한번만 수행된다.
보통 하나의 변수로 for문을 제어하지만, 둘 이상의 변수가 필요할 때에는 콤마','를 구분자로
변수를 초기화하면 된다. 단, 두 변수의 타입은 같아야한다.
for(int i=1 ; i<=10 ; i++) //변수 i의 값을 1로 초기화
for(int i=1, j=0 ; i<=10 ; i++) //변수 i의 값을 1, j의 값을 0으로 초기화
조건식
조건식의 값이 true면 반복을 계속하다가 false면 반복을 중단하고 for문을 벗어난다.
for의 뜻이 '~하는 동안'이므로 조건식이 '참인 동안' 반복을 계속한다고 생각하자.
조건식을 잘못 작성하면 블럭{} 내의 문장이 한 번도 수행되지 않거나 영원히 반복되는
무한반복에 빠질수 있으므로 주의해야 한다.
for(int i=1 ; i<=10 ; i++) //'i<=10'가 참인 동안 반복
증감식
반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다.
매 반복마다 변수의 값이 증감식에 의해서 변하다가 결국 조건식이
거짓이 되면서 for문을 벗어나게 된다. 보통은 '++' 연산자를 주로 사용하지만
여러 연산자들로 작성이 가능하다
for(int i = i ; i<=10 ; i++) // 1부터 10까지 1씩 증가
for(int i = i ; i<=10 ; i--) // 1부터 10까지 1씩 감소
for(int i = i ; i<=10 ; i+=2) // 1부터 10까지 2씩 증가
for(int i = i ; i<=10 ; i*=3) // 1부터 10까지 3배씩 증가
증감식도 초기화와 마찬가지로 쉼표','를 통해 두 문장 이상을 하나로 연결해서 사용 가능하다.
for(int i = 1, j= 10 ; i <= 10 ; i++, j--)
//i는 1부터 10까지 1씩 증가
//j는 10부터 1까지 1씩 감소
위의 세 가지 요소는 필요하지 않으면 모두 생략이 가능하다
for(;;) { ... } //초기화, 조건식, 증감식 모두 생략. 조건식은 참이 된다
조건식이 생략된 경우는 true로 보고 무한 반복을 하게 된다.
멈추고 싶다면 {}만에 if문을 작성해 특정 조건에 for문을 빠져나오게 해야한다.
중첩for문
if문 안에 if문을 작성하듯이 for문 안에 for문을 작성할수 있다.
만일 다음과 같이 5행 10열의 별'*'을 찍으려면 어떻게 해야할까?
**********
**********
**********
**********
**********
for(int i = 0 ; i<5 ; i++){
for(int j = 0 ; j<10 ; j++){
System.out.print('*');
}
System.out.println();
}
2개의 for문이 중첩되었으며 바깥 쪽 for문이 5번 안쪽 for문이 10번 반복되므로 모두 50번 반복된다.
향상된 for문(enhanced for statement)
for( 타입 변수명 : 배열 또는 컬렉션) {
// 반복할 문장
}
위의 문장에서 타입은 배열 또는 컬렉션의 요소의 타입이어야 한다.
배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서
변수에 저장된다. 그리고 반복문의 괄호{}내에서 이 변수를 사용해서 코드르 작성한다.
int[] arr = {1, 2, 3, 4, 5}
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
↓ 두개가 같은 기능이다 ↑
for(int tmp : arr) {
System.out.println(tmp);
}
딱 봐도 향상된 for문이 더 간결하다는 것을 할 수 있다.
그러나 향상된 for문은 배열이나 컬렉션에 저장된 요소들을 읽어오는
용도로만 사용이 가능하다
for문은 자바의 if문과 함께 자바의 모든것이라고 생각한다🌌
사실 for문 자체를 이해하는것은 어렵지 않지만
여러 복잡한 구조의 문제들을 풀어보면서 익숙해지는게 좋겠다😃
댓글