티스토리 뷰

 

 

 

 

 

▶▶   반복문

–  특정 조건에 따라 지정된 범위의 문장들반복 실행하는 문.

–  크게 for문과 while문으로 구분됨.

 

 

 for    —  횟수가 정해져 있는 것                          ex )  밥을 '10번' 먹어라

1.   for문

2.   이중 for문

 

 while    —   조건에 따른 반복이 필요한 것          ex )  밥을 '다' 먹어라

1.   while문

2.   do-while문

 

 

 

 

 

 

 

▶   for문

–  가장 기본적인 반복문.
–  반복 횟수가 정해져 있는 경우에 주로 사용함.
–  초기식, 조건식, 증감식의 위치가 정해져 있어, 초보자가 익히기 쉬움.
 

 


for (초기식; 조건식; 증감식) {

       조건식 결과가 true일 때 반복 실행할 문장들;

}

• 초기식   :   반복 횟수를 판별하기 위한 조건식에서 사용될 제어변수 선언하거나, 초기화하는 문장.
• 조건식   :   반복 여부를 결정하기 위한 조건식,
                    → if문과 마찬가지로 true일 때 블록 내의 문장을 실행하고,  flase일 때 for문을 종료하고 빠져나감.
• 증감식   :   반복을 위한 조건식에 맞춰 초기식을 초기화한 제어변수를 증가 또는 감소시키는 문장.


EX1   )   for문 활용 & 제어변수 i값 출력해보기

—   " x : Hello, World! " 문자열을 10번 반복 출력 (x는 현재 반복 횟수를 나타냄.)

System.out.println("1 : Hello, World!");
System.out.println("2 : Hello, World!");
System.out.println("3 : Hello, World!");
System.out.println("4 : Hello, World!");
System.out.println("5 : Hello, World!");
System.out.println("6 : Hello, World!");
System.out.println("7 : Hello, World!");
System.out.println("8 : Hello, World!");
System.out.println("9 : Hello, World!");
System.out.println("10 : Hello, World!");

→   같은 값은 두고 반복적으로 변하는 값 캐치하기. (1, 2, 3, 4 ..., 10)
→   10번의 반복을 위해서 제어변수 i가 1부터 10이하일 동안,  1씩 증가하면서 출력문을 반복실행하면 됨.

 

위의 10개의 출력문반복문(for)을 사용하여 압축해보자.
• 초기식 : 제어변수 i를 선언하고, 초기값인 1로 초기화 (int = 1)
• 조건식 : 제어변수 i가 10이하일 때 true조건 (i <= 10)
• 증감식 : 제어변수 i를 1씩 증가 (i++) 
                →   암묵적으로 1씩 증가하는 값 i++로 많이 씀. (++i도 가능)

 

for(int i=1; i<=10; i++) {
System.out.println(i + " : Hello, World!");
}
System.out.println("for문 종료 후 i 값 : " + i);

⚠️에러 발생⚠️

–  for문 종료 후의 i값이 알고 싶으나 제어변수 i는 for문에서 선언된 변수이므로, 
    for문의 블록{ }이 끝나면 사용 불가능한 변수임. (존재하지 않음.)
→   제어변수 i를 for문 종료 후에도 사용하려면 최소한 for문보다 위쪽(앞쪽)에서 선언해야 함!

 

int i;
for(i = 1; i <= 10; i++) {
System.out.println(i + " : Hello, World!");
}
System.out.println("for문 '종료 후' i 값 : " + i);

→  위 코드에서 i의 주인을 따지자면 for문 밖에 있으므로 현재 main 메소드의 것!

      for문 입장에서는 i를 잠깐 빌려쓰고 다시 돌려주는거라 for문 종료후에도 i를 출력했을 때 값이 나옴.

✓   실행 결과

더보기

1 : Hello, World!
2 : Hello, World!
3 : Hello, World!
4 : Hello, World!
5 : Hello, World!
6 : Hello, World!
7 : Hello, World!
8 : Hello, World!
9 : Hello, World!
10 : Hello, World!
for문 '종료 후' i 값 : 11

 

 

 

EX2   )   증가값 출력하기

 

1 )  제어변수 i가 1~10까지 1씩 증가하면서 i값 출력
       → 출력형태 : 1 2 3 4 5 6 7 8 9 10

int i;
for(i = 1; i <= 10; i++) {
System.out.print(i + " ");
}

→   가로로 출력이 되게끔 해야 하므로 print()메소드를 사용함.

     '1 2 3 4 5 6 7 8 9 10' 출력됨.

 

 

2 )  위와 같은 조건,  i가 2씩 증가하면서 i값 출력 (홀수 출력)

int i;
for(i = 1; i < 11; i+=2) {
System.out.print(i + " ");
}

   '1 3 5 7 9'  출력됨.

 

 

3 )  같은 조건으로 짝수만 출력

int i;
for(i = 2; i <= 10; i+=2) {
System.out.print(i + " ");
}

   '2 4 6 8 10'  출력됨.

 

 

 

EX3   )   감소값 출력하기

 

제어변수 i가 10 ~ 1까지 1씩 감소하면서 i값을 출력 (역순으로 출력)
→   출력형태 : 10 9 8 7 6 5 4 3 2 1

int i;
for(i=10; i>=1; i--) {
System.out.print(i + " ");
}

   10 9 8 7 6 5 4 3 2 1 출력됨.


Q   )    for문을 사용하여 특정 단에 해당하는 구구단을 출력하시오.

 

ex )

           2 * 1 = 2

           2 * 2 = 4

           2 * 3 = 6

           2 * 4 = 8

           2 * 5 = 10

           2 * 6 = 12

           2 * 7 = 14

           2 * 8 = 16

           2 * 9 = 18

 

A–1   )   println 메소드

int dan = 2;
int i;
System.out.println("< " + dan + "단 >");
for(i = 1; i <= 9; i++) {
System.out.println(dan + " * " + i + " = " + dan*i);
}

   실행 결과

더보기

           2 * 1 = 2

           2 * 2 = 4

           2 * 3 = 6

           2 * 4 = 8

           2 * 5 = 10

           2 * 6 = 12

           2 * 7 = 14

           2 * 8 = 16

           2 * 9 = 18

 

 

A–2   )  printf 메소드 & 형식지정문자

int dan = 2;
i = 1;
System.out.printf("< %d단 >\n", dan);
for(i = 1; i<= 9; i++) {
System.out.printf("%d * %d = %d \n", dan, i, dan*i);
}

   실행결과

더보기

           2 * 1 = 2

           2 * 2 = 4

           2 * 3 = 6

           2 * 4 = 8

           2 * 5 = 10

           2 * 6 = 12

           2 * 7 = 14

           2 * 8 = 16

           2 * 9 = 18

 

 

 

 

 

 

 

▶   반복문을 사용한 연산의 누적

 

 1 )   연산을 누적할 누적 변수 선언 및 초기화 (반복문보다 먼저 수행)

         →  누적합( + )을 구할 때는 0의 값으로 초기화, 누적곱( * )을 구할 때는  1의 값으로 초기화 함.
 2 )   반복문을 사용하여 특정 횟수 반복
 3 )   반복문 내에서 특정 연산(데이터)누적변수에 누적
 4 )   반복문 종료 후 누적 변수 값 사용 (출력) 


EX1   )   연산의 누적합 구하기

int num = 1;
int sum = 0;
sum += num; // 1
num++; // 2
sum += num; // 3
num++; // 3
sum += num; // 6
num++; // 4
sum += num; // 10
num++; // 5
sum += num; // 15
num++; // 6
System.out.println(sum);

→   num은 합계에 누적될 변수,   sum은 합계를 누적할 변수.

→   sum + num의 결과를 다시 변수 sum에 저장함 (sum은 num값만큼 증가함)

→   num은 1씩 증가,  sum은 num값만큼 계속 증가 (누적합)

   실행결과

 

 

 

EX2   )   1~10까지 1씩 증가하는 정수의 합을 계산

int total = 0;
for(int i = 1; i <= 10; i++) {
total += i;
System.out.println("i = " + i + ", total = " + total);
}
System.out.println("1~10까지 정수의 합 = " + total); // total은 for문 밖에서 선언했으므로 출력 가능

→   누적변수 total을 선언,  0으로 초기화 (누적합을 구할 땐 누적변수의 값을 0으로 둠.)

→   for문안에서 i는 1~10까지 1씩 증가하고, 누적변수 total에 i값만큼 누적함.

   실행결과

더보기

i = 1, total = 1
i = 2, total = 3
i = 3, total = 6
i = 4, total = 10
i = 5, total = 15
i = 6, total = 21
i = 7, total = 28
i = 8, total = 36
i = 9, total = 45
i = 10, total = 55
1~10까지 정수의 합 = 55

 

 

 

EX3   )   정수 1~100까지 합을 누적변수 total에 누적 후 출력

int i = 1; // 변하는 애
int total = 0; // 누적 합 받는 애
for(i = 1; i<=100; i++) {
total += i;
}
System.out.printf("정수 1~100까지의 total = %d \n", total);

→   말만 조금 다르지 사실상 EX2와 같은 누적합 구하기임.

→   합계에 누적될 변수( i )와,  합계를 누적할 변수( total )를 만들어줌.

→   i값이 1씩 증가하며 total에 i값이 누적됨.

→   printf 메소드를 사용하여 출력함.

   실행결과

더보기

정수 1~100까지의 total = 5050 

 

 

 

EX4   )   1~10까지 1씩 증가하면서, 정수 중 짝수의 합만 계산

 

for문을 사용하여 i를 1씩 증가시키면서 10까지 만들 때, 조건문 if도 사용하여 짝수만 골라내서 더하면 됨.
for문을 먼저 써서 i가 뭐냐에 따라 if로 짝수 골라내고 더하기.
즉,  for문 안에 if문이 들어가는 형태.

int i = 1;
int total = 0;
for(i=1; i<=10; i++) {
if(i%2 ==0) {
total += i;
}
}
System.out.println("1~10까지 정수 중, 짝수의 합 = " + total);

✓   실행결과

더보기

1~10까지 정수 중, 짝수의 합 = 30

 

위와 같은 조건에서 홀수 누적합 출력하기

int i = 1;
int total = 0;
for(i=1; i<=10; i++) {
if(i%2 == 1) {
total += i;
}
}
System.out.printf("1~10까지 정수 중, 홀수의 합 = %d \n", total);

→   홀수는 홀수%2 ==1 이 나오면 홀수.

→   for문으로 i값을 1씩 증가시키고 그 중에 홀수만 골라내서 누적변수에 누적함.

   실행결과

더보기

1~10까지 정수 중, 홀수의 합 = 25 

 

짝수와 홀수의 각 누적합을 함께 출력해보기

int i = 1;
int oddTotal = 0;
int evenTotal = 0;
for(i=1; i<=10; i++) {
if(i%2==1) {
oddTotal += i;
}else {
evenTotal += i;
}
}
System.out.printf("1~10까지 정수 중, 홀수의 합 = %d \n", oddTotal);
System.out.printf("1~10까지 정수 중, 짝수의 합 = %d", evenTotal);

→   for문으로 i를 1씩 증가시키고,  i값이 짝수이냐 홀수이냐를 if-else문으로 구분하여 각각의 누적변수에 누적함.  

✓   실행결과

더보기

1~10까지 정수 중, 홀수의 합 = 25 
1~10까지 정수 중, 짝수의 합 = 30

 

 

 

 

 

 

 

 ▶▶   중첩 for문

–  for문 내부에 또 다른 for문을 기술하는 것
–  바깥쪽 for문과 안쪽 for문으로 구분

    →  바깥쪽 for문이 한 바퀴 돌면, 안쪽 for문은 여러 바퀴 돔. 안쪽 for문 반복 횟수가 바깥쪽 for문 반복 횟수보다 많음.

    →  안쪽 for문 반복 횟수 = 안쪽 for문 횟수 * 바깥쪽 for문 횟수
ex )  시계의 분침바깥쪽 for문으로 0~59까지 60번 반복할 때, 분침 1바퀴 당 초침안쪽 for문으로 0~59까지 60번 반복
        = 1시간(60분)당 초침의 반복 횟수 =  분침 횟수(60) * 초침 횟수(60)
  

 


for (초기식1;  조건식1;  증감식1) {                                                        

       조건식1이 true일 때 실행되는 문장;

         for (초기식2;  조건식2;  증감식2) {
      
               조건식1도 true, 조건식2도 true일 때 실행되는 문장; 
          }
 
          안쪽 for문 반복이 종료된 후 실행되는 문장;
}


EX1   )   중첩 for문

for(int i = 1; i <= 3; i++) { // 바깥쪽 for문
System.out.println("i = " + i); // 3회(i가 1~3까지 3번 반복)
for(int j = 1; j <= 2; j++) { // 안쪽 for문
System.out.println("----------> j = " + j); // 6회(j횟수(2) * i횟수(3))
}
System.out.println("-----안쪽 for문 반복 종료-----"); // 안쪽 for문 반복이 종료된 후 실행되는 문장
}

→   바깥쪽 for문은 i값이 1~3까지 1씩 증가하면서 반복,  안쪽 for문은 j값이 1~2까지 1씩 증가하면서 반복됨.

→   바깥쪽 for문이 한 번 실행될 때, 안쪽 for문은 한 바퀴 다 돌고나서 안쪽 for문 밖의 출력문(바깥쪽 for문 내의)을 실행함.

   실행결과

더보기

i = 1
----------> j = 1
----------> j = 2
-----안쪽 for문 반복 종료-----
i = 2
----------> j = 1
----------> j = 2
-----안쪽 for문 반복 종료-----
i = 3
----------> j = 1
----------> j = 2
-----안쪽 for문 반복 종료-----

 

 

 

EX2   )   바깥쪽 for문 i값이 1~10까지 반복할 동안,  안쪽 for문 j값을 1~5까지 반복하면서 i와 j값 출력

int i, j; // 동시에 변수 선언
for(i=1; i<=10; i++) {
System.out.println("------------");
System.out.printf("i = %d \n", i);
System.out.println("------------");
for(j=1; j<=5; j++) {
System.out.printf("j = %d \n", j);
}
}

   실행결과

더보기

------------
i = 1 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 2 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 3 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 4 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 5 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 6 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 7 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 8 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 9 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
------------
i = 10 
------------
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

▶   while문

–  for문과 마찬가지로 특정 조건식의 판별 결과가 true일 동안 반복 수행.
–  for문과 달리 조건식 위치만 정해져 있고, 초기식과 증감식의 위치는 유동적으로 변함 (생략도 가능)
–  for문은 주로 반복횟수가 정해져 있는 경우에 주로 사용하며,
    while문은 주로 반복횟수가 정해져 있지 않은 경우에 사용함.
–  for문과 while문은 100% 상호 변환이 가능함.

 

 

 


초기식; 
while(조건식){

증감식;
조건식 결과가 true일 때 반복 실행할 문장;
증감식;

}

•   초기식   —   while문 보다 위에 위치해야 함 (생략 가능)

•   증감식   —  증감식 위치는 위아래 모두 가능


EX1   )   for문   →   while문

 

먼저,  for문을 사용하여 "Hello, World!" 문자열 10번 반복함.

for(int i=1; i<=10; i++) {
System.out.println(i + " : Hello, World!");
}

위의 for문을 while문으로 바꿈.

int i = 1; // 초기식
while(i <= 10) { // 조건식
System.out.println(i + " : Hello, World!");
i++; // 증감식
}
System.out.println("while문 종료 후 i 값은 = " + i);

✓   실행 결과

더보기

1 : Hello, World!
2 : Hello, World!
3 : Hello, World!
4 : Hello, World!
5 : Hello, World!
6 : Hello, World!
7 : Hello, World!
8 : Hello, World!
9 : Hello, World!
10 : Hello, World!

while문 종료 후 i 값은 = 11

→    제어변수 i가 while문 보다 위쪽에 선언되었으므로,  while문 반복 종료 후에도 변수 i의 값에 접근 가능.

 

 

 

EX2   )   증가값,  감소값,  짝수,  홀수 출력

 

1 )  제어변수 i가 1~10까지 1씩 증가하면서 i값 출력

int i = 1;
while(i <= 10) {
System.out.print(i + " ");
i++;
}

 

   실행 결과

더보기

1 2 3 4 5 6 7 8 9 10

 

2 )  제어변수 i가 1~10까지 2씩 증가하면서 i값 출력 (홀수 출력)

int i = 1;
while(i <= 10) {
System.out.print(i + " ");
i += 2;
}

   실행 결과

더보기

1 3 5 7 9

 

3 )  제어변수 i가 1~10까지 짝수만 출력

int i =2;
while(i <= 10) {
System.out.print(i + " ");
i += 2;
}

   실행 결과

더보기

2 4 6 8 10 

 

4 )  제어변수 i가 10~1까지 감소하면서 i값 출력 (역순으로 출력)

int i = 10;
while(i >= 1) {
System.out.print(i + " ");
i--;
}

   실행 결과

더보기

10 9 8 7 6 5 4 3 2 1

 

 

 

EX3   )   증감식 위치에 따른 초기식 & 조건식 위치

 

아래는 제어변수 i가 1~10까지 1씩 증가하면서 i값 출력하는 코드.

int i = 1;
while(i <= 10) {
System.out.print(i + " \n");
i++;
}
System.out.println("while문 종료 후 i 값은 : "+ i);

   실행 결과

더보기










10 
while문 종료 후 i 값은 : 11

 

만약 i++의 위치출력문 밑이 아닌 위로 가게 된다면?

int i = 0;
while(i < 10) {
i++;
System.out.print(i + " \n");
}
System.out.println("while문 종료 후 i 값은 : "+ i);

→   제어변수 i는 while문에 들어오자마자 +1되고 난 뒤에 출력되므로,

       기존의 초기값 1에서 0으로 바꿔야 하며,  조건식 또한 i가 0일때부터 카운팅되므로 'i < 10'라고 해야 총 10번 반복됨.

→   첫번째 코드는 초기식이 i = 1이므로 1부터 카운팅이 되서 while문 종료 후의 i값은 11이며,

       두번째 코드에서는 초기식이 i = 0이므로 0부터 카운팅이 되서 while문 종료 후의 i값은 10이 출력됨.

   실행 결과

더보기










10 
while문 종료 후 i 값은 : 10

 

 


 

 

Q1   )   while문을 사용하여 구구단 2단을 출력하시오.

A1   )

int dan = 2;
System.out.printf("< %d단 > \n", dan);
int i = 1;
while(i<10) {
System.out.printf("%d * %d = %d \n", dan, i, dan*i);
i++;
}

✓   실행 결과

더보기

< 2단 > 
2 * 1 = 2 
2 * 2 = 4 
2 * 3 = 6 
2 * 4 = 8 
2 * 5 = 10 
2 * 6 = 12 
2 * 7 = 14 
2 * 8 = 16 
2 * 9 = 18 

 

 


 

 

Q2   ) while문을 사용하여 정수1~10까지의 합(total)을 계산하고 출력하기.

A2   )

 

누적합을 구해야하므로 누적변수 필요함.

int total = 0;
int num = 0;
while(num < 11) {
total += num;
num++;
}
System.out.println("1~10까지 정수의 합 = " + total);

→  while문 작성할 때는 증감식을 썼는지 안썼는지 습관적으로 꼭 체크하기! (자주 빼먹어서 무한루프 걸림ㅠ)

   실행 결과

더보기

1~10까지 정수의 합 = 55

 

 

 

 

 

 

 

 

 

 

▶   do – while

–  while문은 조건을 먼저 검사하고 반복 여부를 결정하지만,
    do-while문은 일단 반복문을 실행하고 난 뒤 조건을 검사하여 다음 반복 여부를 결정
–  while문은 조건식에 따라 반복문이 한 번도 실행되지 않을 수 있지만,  do-while문은 최소 한 번의 실행은 보장됨.

 

 

 


do {

    // 반복 실행할 문장

} while (조건식);

→  주의! while문 뒤에 반드시 세미콜론(;) 필수!


EX   )   while문과 do-while문의 차이

int i = 11;
while(i <= 10) {
System.out.println("i = " + i);
i++;
}
System.out.println("while문 종료 후 i값 = " + i);

→   제어변수 i 초기값이 10보다 클 경우,  조건식 판별 결과가 false이므로 반복문은 실행되지 못함.

→   while문 종료 후 i값은 그대로임.

   실행 결과

더보기

while문 종료 후 i값 = 11

 

위의 코드를 do-while문으로 바꾸면 최소 한번은 실행될 것.

do {
System.out.println("i = " + i);
i++;
}while(i <= 10);
System.out.println("while문 종료 후 i값 = " + i);

→   do-while문은 바로 조건식이 나오지 않으므로 블록문이 무조건 한 번 실행됨.

→   제어변수 i 초기값이 10보다 크더라도 조건식 판별을 마지막에 수행하므로, 
      일단 실행문이 한 번 실행되고, 이후 조건식 판별 결과가 false이므로 do-while문을 빠져나감.

   실행 결과

더보기

i = 11
while문 종료 후 i값 = 12

 

 

 

 

 

 

 

 

 

 

▶   중첩 while문

–  중첩 for과 마찬가지로 while문 내부에 또 다른 while문을 기술

 

 

 


초기식1;

while(조건식1) {

          초기식2;
          while(조건식2) {
                   반복할 문장;
                   증감식2;
           }
}


EX   )   중첩 for문   →   중첩 while문

 

for문을 사용하여 i값이 1~5까지 반복할 동안,  j값이 1~3까지 반복하는 중첩 for문

for(int i=1; i <= 5; i++) {
for(int j=1; j <= 3; j++) {
System.out.println("i = " + i + ", j = " + j);
}
}

   실행 결과

더보기

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
i = 2, j = 3
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
i = 4, j = 1
i = 4, j = 2
i = 4, j = 3
i = 5, j = 1
i = 5, j = 2
i = 5, j = 3

 

→   위의 코드를 중첩while문으로 만들기.

int i = 1; // 초기식1
while(i <= 5) { // 조건식1
int j = 1; // 초기식2
while(j <= 3) { // 조건식2
System.out.println("i = " + i + ", j = " + j);
j++; // 증감식2
}
i++; // 증감식1
}

 

 


 

 

Q   )   중첩 while문을 사용하여 구구단 전체(2단~9단)를 출력하시오.

 

A   )

int dan = 2;
while(dan < 10) {
System.out.printf("< %d단 > \n", dan);
int num = 1;
while(num < 10) {
System.out.printf("%d * %d = %d \n", dan, num, dan*num);
num++;
}
dan++;
}

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함