프로그래밍 언어/JAVA

[JAVA] 자바의 반복문 for & while

Rateye 2021. 1. 18. 13:59
728x90
반응형

반복(loop) 문

  • 특정 조건에 따라 문장 또는 블록을 반복 실행하는 문

  • for문, while문으로 구분됨

    for문은 주로 반복 횟수가 정해져 있는 반복문에 사용되며, while문은 주로 반복횟수가 정해져 있지 않은 반복문에 사용됨

  • 초기식, 조건식, 증감식, 실행문(블록)으로 구성됨

for문

  • 초기식, 조건식, 증감식의 위치가 정해져 있는 반복문 (초심자에게 유리)

  • 초기식으로 제어 변수를 초기화 한 후, 조건식을 통해 반복 여부를 결정한 뒤 결과가 true 이면 반복할 문장을 실행하고 증감식을 통해 제어변수를 증감시킴

    이후 조건식 -> 실행문 -> 증감식 순으로 반복 수행하다 조건식 결과가 false 가 되면 반복문을 종료하고 빠져나감

기본 문법

for(초기식(1); 조건식(2); 증감식(4)) {
 		// 조건식 결과가 true 일 때 반복 실행할 문장들...(3)
 }
 => 초기식(1) : 반복 횟수를 제어하는 제어변수를 초기화(선언 포함)
                (for문 시작 시 단 한 번 수행됨)
 => 조건식(2) : 반복 여부 결정을 위해 조건 판별
             (조건식 결과가 true 일 때 반복, false 일 때 종료)
 => 증감식(4) : 제어변수를 조건식에 가까워지도록 증감 수행
 => 조건식이 true 일 동안 2 -> 3 -> 4 를 반복 수행함

 

		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!");
		
		System.out.println("-------------------");
		// for문을 사용하여 "Hello, World!" 문자열 출력 작업을 반복 수행
		for(int i = 1; i <= 10; i++) {
			// 조건식 판별 결과가 true 일 때 실행할 문장
			System.out.println(i + " : Hello, World!");
		}

 

위의 반복문에 대한 흐름 확인(= 디버깅, Debugging)

제어변수 i 조건식 i <= 10 실행결과(출력) 증감식 i++
1 true "1 : Hello, World" 출력 1 -> 2
2 true "2 : Hello, World" 출력 2 -> 3
3 true "3 : Hello, World" 출력 3 -> 4
- - - 생략 - - -
8 true "8 : Hello, World" 출력 8 -> 9
9 true "9 : Hello, World" 출력 9 -> 10
10 true "10 : Hello, World" 출력 10 -> 11
11 false for문을 종료하고 빠져나감  
System.out.println("----------------------------");
		
		// 제어변수 i가 1 ~ 10까지 2씩 증가하면서 i 값 출력
		// => 1 3 5 7 9
		for(int i = 1; i <= 10; i += 2) {
			System.out.print(i + " ");
		}
		System.out.println(); // 줄바꿈
		
		System.out.println("----------------------------");
		
		// 제어변수 i가 2 ~ 10까지 2씩 증가하면서 i 값 출력
		// => 2 4 6 8 10
		for(int i = 2; i <= 10; i += 2) {
			System.out.print(i + " ");
		}
		System.out.println(); // 줄바꿈
		System.out.println("----------------------------");
		
		// 제어변수 i가 10 ~ 1까지 1씩 감소하면서 i 값 출력
		// => 10 9 8 7 6 5 4 3 2 1
		for(int i = 10; i >= 1; i--) {
			System.out.print(i + " ");
		}

for문과 if문의 조합

  • for문 내에서 if문을 사용하여 반복 과정에서 특정 조건에 만족하면 지정된 문장을 실행하거나 실행하지 않음
// for문을 사용하여 i가 1 ~ 10까지 1씩 증가하면서 반복 => i 출력
		for(int i = 1; i <= 10; i++) {
			// 1 ~ 10 까지 정수 중 i값이 5일 때 출력
//			if(i == 5) {
//				System.out.println("i = " + i);
//			}
			
			// 1 ~ 10 까지 정수 중 i값이 5보다 작을 때 출력
			if(i < 5) {
				System.out.println("i = " + i);
			}
		}
		
		System.out.println("==========================");
		
		// for문을 사용하여 i가 1 ~ 10까지 1씩 증가 반복
		// => i값이 짝수일 때 "i = X, 짝수!" 출력하고,
		//    i값이 홀수일 때 "i = X, 홀수!" 출력
		for(int i = 1; i <= 10; i++) {
			if(i % 2 == 0) { // 짝수일 때
				System.out.println("i = " + i + ", 짝수!");
			} else { // else if(i % 2 == 1) 대신 else 문 사용 가능 
				System.out.println("i = " + i + ", 홀수!");
			}
		}

반복문을 사용한 합계(연산의 누적) 계산

  1. 합계를 누적할 누적 변수 선언 및 초기화 ex. 덧셈을 누적할 total 변수를 0으로 초기화 : int total = 0
  2. 합계를 계산할 범위의 반복문 작성 (ex. 1 ~ 10까지 1씩 증가하면서 합계 계산) for(int i = 1; i <= 10; i++) {}
  3. 반복문 내에서 합계 누적 ex. i값을 total에 누적 : total += i
  4. 반복문 안 또는 바깥에서 누적 결과 출력
		/*
		 * 1 ~ 10 까지의 합 계산
		 * => 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
		 * => 1 ~ 10까지 1씩 증가하면서 반복하는 반복문 필요
		 * => 1 ~ 10 까지 1씩 증가하는 숫자를 반복해서 누적할 누적변수 필요
		 */
		
		int total = 0; // 합계를 누적할 누적변수 선언 및 0 으로 초기화
		
		for(int i = 1; i <= 10; i++) {
			// 누적변수 total 에 제어변수 i 값을 누적
			// => total 에 i값을 더해서 다시 total 에 저장
			total += i; // i값 누적(total = total + i 과 동일)
			
			// 만약, 누적 과정을 출력하려면 반복문 내에서 출력문 사용
			//			System.out.println("i = " + i);
			//			System.out.println("1 ~ 10까지의 합 : " + total);
		}
		
		// 반복문 종료(누적 종료) 후 결과를 출력
		System.out.println("1 ~ 10까지의 합 : " + total);

중첩 for문

  • for문 내부에 또 다른 for문을 기술하는 것
  • 특정 작업의 반복에 대해 다시 반복을 적용하여 중첩 반복을 수행 ex) 시계의 분 & 초를 표현하거나, 운동장 트랙을 10바퀴 도는 것
  • 중첩 for문 중에서 바깥쪽에 기술된 for문을 바깥쪽 for문, 안쪽에 기술된 for문을 안쪽 for문이라고 한다. 안쪽 for문의 반복 횟수가 바깥쪽 for문 반복 횟수보다 많다. 안쪽 for문 반복 횟수 = 안쪽 for문 반복 횟수 * 바깥쪽 for문 반복 횟수

기본 문법

 for(초기식1; 조건식1; 증감식1) {
 		문장1; // 바깥쪽 for문 반복 횟수만큼 반복
 		for(초기식2; 조건식2; 증감식2) {
 			문장2; 
 			// 안쪽 for문 반복 횟수만큼 반복 * 바깥쪽 for문 반복횟수 만큼 반복
 		}
 		문장3; // 바깥쪽 for문 반복 횟수만큼 반복
 
 }

실행 순서

초기식1 -> 조건식1(true 일 때) -> 문장1 -> 초기식2 -> 조건식2(true 일 때) -> 문장2 -> 증감식2 -> 조건식2(반복) -> 조건식2(false 일 때) -> 문장3 -> 증감식1 -> 조건식1(반복)
		for(int i = 1; i <= 3; i++) { // 바깥쪽 for문
			
			System.out.println("i = " + i);
			
			for(int j = 1; j <= 5; j++) { // 안쪽 for문
				// 안쪽 for문 반복 횟수 = j 5번 * i 3번 = 15번
				System.out.println("--------------> j = " + j);
				
			}
			
			System.out.println("========================");
			
		}

반복문에서 제어 변수의 활용

  • 반복문에서 제어변수의 초기식, 조건식, 증감식 등에 다른 변수(제어 변수 포함)를 조합하여 사용 가능 특히, 계속 변화하는 제어 변수를 조건식 등에 사용할 경우 반복 횟수가 동적으로 변하는 반복문을 구현할 수 있다.
		/*
		 * 안쪽 for문의 반복횟수가 바깥쪽 for문의 제어변수에 영향을 받는 for문
		 * *      i = 1, j = 1 ~ 1
		 * **     i = 2, j = 1 ~ 2
		 * ***    i = 3, j = 1 ~ 3
		 * ****   i = 4, j = 1 ~ 4
		 * *****  i = 5, j = 1 ~ 5
		 * => j 값의 조건식(최대값)이 i값과 동일함
		 *    따라서, j 반복의 조건식에 i값을 사용하여 
		 *    조건식을 동적으로 변화시킬 수 있다!
		 */
		
		for(int i = 1; i <= 5; i++) {
			
			for(int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			
			System.out.println(); // 줄바꿈
			
		}

 

728x90
반응형

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

[JAVA] 자바의 메서드 Method  (0) 2021.01.18
[JAVA] 자바의 배열 Array  (0) 2021.01.18
[JAVA] 조건문 if & switch  (0) 2021.01.18
[JAVA] 자바의 비교&논리 연산자  (0) 2021.01.18
[JAVA] 자바의 연산자  (0) 2021.01.18