1. 반복문이란?
반복문은 어떤 특정한 명령문들이 반복적으로 실행되도록 할 때 사용된다.
반복문의 종류로는 for문, while문, do-while문이 있다.
for문과 while문 중 어떤 것을 사용해서 반복문을 작성해서 상관은 없다.
그러나 for문은 필요한 반복횟수를 알고 있을 때 사용하는 것이 좋으며, while은 조건에 따라 반복해야할 때 사용하는 것이 좋다.
while문과 do-while문은 조건을 먼저 검사하느냐, 명령문을 먼저 실행하느냐에 대한 차이만 존재하며 나머지 방식은 동일하다.
while문은 조건을 먼저 검사하고, do-while문은 명령문을 먼저 실행한다.
2. for문
for문은 필요한 반복 횟수를 알고 있을 때 유용한 반복문이다.
- for(초기화식; 조건식; 증감식)
- for문의 초기화식, 조건식, 증감식에 사용되는 변수를 루프 카운터 변수라고 한다.
- 초기화식은 루프 카운터 변수의 시작 값을 설정하며, 루프 카운터 변수에 대한 조건식이 참값일 때 계속 반복하고 false일 때 정지한다. 그리고 루프 카운터 변수는 증감식에 따라 그 값이 변화한다.
- 루프 카운터 변수는 초기화식에서 초기화할 수 도 있고, for문 작성 전에 초기화할 수도 있다(for문에서 생략 가능).
- 루프 카운터 변수로 float 타입을 사용해서는 안된다. 실수를 정확히 표현할 수 없으므로 의도하지 않은 반복이 발생한다.
public class ForSumFrom1To100Example1 {
public static void main(String[] args) {
int sum = 0; //for문 밖에서 sum 변수를 사용하기 위해 이곳에 선언.
for(int i = 1; i <= 100; i++) {
sum += i;
}
System.out.printf("1~100의 합: %d", sum);
}
}
///////////////////////////////////////////////////////////////////////
public class ForSumFrom1to100Example2 {
public static void main(String[] args) {
int sum = 0;
int i = 0; //변수 i를 for문 전에 선언할 경우, for문 내부와 외부에서 모두 사용 가능하다.
for(i = 1; i <= 100; i++) {
sum += i;
}
System.out.printf("1~%d의 합: %d", i - 1, sum);
}
}
////////////////////////////////////////////////////////////////////
public class ForFloatCounterExample {
public static void main(String[] args) {
// float 타입은 0.1을 정확하게 표현할 수 없다. 이처럼 float 타입은 숫자를 정확히 표현할 수 없기 때문에, 카운트 변수로는 사용하지 말아야한다.
for(float x = 0.1f; x <= 1.0f; x += 0.1f) {
System.out.println(x);
}
// float 타입 0.1f는 0.1보다 약간 큰 값을 표현한다. 따라서 10번이 아닌 9번이 프린트된다.
}
}
for문 내부에 또 다른 for문을 작성할 수 있다.
public class ForMultiplicationTableExample {
public static void main(String[] args) {
for (int m = 2; m <= 9; m++) {
System.out.printf("*** %d단 ***\n", m);
for(int n = 1; n <= 9; n++) {
System.out.printf("%d X %d = %d\n", m, n, m*n);
}
System.out.println();
}
}
}
3. while문
while문은 조건에 따라 반복하고 싶을 때 유용한 반복문이며, 조건식이 true일 때 반복하고 false일 때 종료된다.
do-while문도 방식은 똑같으며, 명령문을 먼저 실행한 뒤 조건식을 검사한다는 것만 차이가 있다.
public class WhileSumFrom1To100Example {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i<=100) {
sum += i;
i++;
}
System.out.printf("1~100의 합: %d", sum);
}
}
4. break, continue
break는 반복문인 for, while, do-while문을 정지할 때 사용되며, 조건식 중 switch문에도 사용된다.
break문은 일반적으로 if문과 함께 사용되며, if문의 조건식이 true일 때 break를 실행하는 방식으로 사용된다.
만약 반복문이 중첩되어 있을 경우, break문은 가장 가까운 반복문만 종료하며, 외부의 반복문을 종료하고 싶을 경우 외부 반복문과 break에 동일한 라벨을 사용해주면 된다.
public class BreakOutterExample {
public static void main(String[] args) {
//for문에 Outter 라벨을 붙여줌.
Outter: for(char upper = 'A'; upper <= 'Z'; upper++) {
for(char lower = 'a'; lower <= 'z'; lower++) {
System.out.printf("%c-%c\n", upper, lower);
if(lower == 'g') {
break Outter; //Outter 라벨이 붙은 반복문을 종료함.
}
}
}
System.out.println("프로그램 종료!");
}
}
continue문은 반복문의 종료가 아닌 for문의 증감식, while문과 do-while문의 조건식으로 이동하여 다음 반복을 실행하고 싶을 때 사용한다.
break문과 마찬가지로 if문과 함께 사용되며, if문의 조건식이 true일 때 반복문의 첫 부분으로 돌아가 다음 반복을 실행하는 방식으로 사용된다.
public class ContinueExample {
public static void main(String[] args) {
for(int i = 1; i <= 10; i++) {
if(i%2 != 0) {
continue;
}
System.out.println(i);
}
}
}
출처: 혼자 공부하는 자바(신용권)