관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch4 - 13 ~ 15 [for문, 중첩for문] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch4 - 13 ~ 15 [for문, 중첩for문]

소소한나구리 2023. 11. 7. 12:10

1) for문 

  • 조건을 만족하는 동안 블럭{}을 반복 - 반복 횟수를 알 때 적합
  • 초기화 -> 조건식 -> 수행될 문장 -> 증감식 -> 조건식 -> 수행될 문장... (거짓이 될때까지 반복 후) -> for문 아웃
for (초기화; 조건식; 증감식) {
    // 수행될 문장
}

for(int i=1; i<=5; i++){   // 1부터; 5까지; 1씩증가
	System.out.println("I can do it.");
}
  • for 문의 초기화, 조건식, 증감식은 생략이 가능
  • 초기화 -> for문 밖에서 선언
  • 조건식 -> 생략 시 항상 true -> 무한 반복문
int i = 1;	// 변수를 for문 밖에서 미리 선언 -> 초기화 생략 가능

for ( ; ; )	{ // for문의 초기화, 조건식(생략시 항상 ture), 증감식 생략
	System.out.println("i="i+1);
}

 

(1) 기본 예제

public class ex4_8 {

	public static void main(String[] args) {
		for (int i = 1; i <= 3; i++) { // 블럭 안의 문장을 3번 반복
			System.out.println("Hello");		
		}
	}
}
public class ex4_8 {

	public static void main(String[] args) { // i=1,2,4,8,16 - 16이 거짓이여서 4번만 반복
		for (int i = 1; i <= 10; i=i*2) { // 블럭 안의 문장을 4번 반복
			System.out.println("Hello");		
		}
	}
}
public class ex4_8 {

	public static void main(String[] args) { // i=10,9,8,7,6,5,4,3,2,1
		for (int i = 10; i >= 1 ; i--) { // 블럭 안의 문장을 10번 반복
			System.out.println(i);		
		}
	}
}

 

(2) sum(합계)

  • 처음부터 반복문을 작성하기 어렵다면 쉽게 코드를 먼저 작성하고 코드를 보다보면 간단히 바꿀 수 있게 됨.
public class ex4_10 {

	public static void main(String[] args) {
		int sum = 0;  // 합계를 저장하기 위한 변수	
		
//		sum += 1;
//		sum += 2;
//		sum += 3;
//		sum += 4;
//		sum += 5;
//		
//		System.out.println(sum);
//	}
//}
		// 위의 계산을 아래의 간단한 반복문으로 작성
		// 처음부터 반복문을 작성하기 어렵다면 위에 처럼 쉽게 코드를 먼저 작성하고,
		// 코드를 보다보면 간단히 바꿀 수 있게 됨.
		
		for (int i = 1; i <= 5 ; i++) {
			sum += i ;  // sum = sum + i;
			System.out.printf("1부터 %2d 까지의 합: %2d%n", i, sum);		
		}
	}		
}

 

(3) 변수 추가

public class ex4_8 {

	public static void main(String[] args) { // 타입이 같은 변수를 여러개 쓸 수 있음
		for (int i = 1, j = 10,k = 20; i <= 10 ; i++, j--, k--) { // i가 10이 될 때 까지 반복
			System.out.println(i+","+j+","+k);		
		}
	}
}

출력값
1,10,20
2,9,19
3,8,18
4,7,17
5,6,16
6,5,15
7,4,14
8,3,13
9,2,12
10,1,11

 

(4) 변수를 밖으로 빼기

  • for문 안에 선언된 변수는 해당 블럭 안에서만 사용 가능
  • for문 밖에서 해당 변수를 사용하려면 변수를 밖으로 빼줘야 함
public class ex4_8 {

	public static void main(String[] args) { // 변수를 여기에서부터
		int i; // for문의 변수를 밖으로 빼서 선언
		
		for (i = 1; i <= 10; i++) {
			System.out.println(i);		
		}
		System.out.println(i);	
	} // 여기까지 쓸 수 있게 됨
}

//단, 변수의 scope(범위)는 작을 수록 좋다 - 확인 해야할 범위가 많아짐
//scope - 선언된 위치부터 선언된 블럭의 끝까지

 

(5) 반복문이 잘못 되었을 때 확인 방법

  • 출력에 변수 값을 선언하면 확인 가능

** 주의

  • 조건식은 주의깊게 작성해야함
  • 무한 반복에 빠질 수 있다..  -> 콘솔창의 stop버튼 (빨간색 네모버튼)으로 멈출 수 있음
public class ex4_8 {

	public static void main(String[] args) { //무한반복
		for (int i = 10; 1 >= 1 ; i--) { // 조건식이 항상 true
			System.out.println(i);		
		}
	}
}

콘솔 창의 빨간 네모 버튼이 스탑버튼

 

 

(6) 무한반복문

  • 조건식 생략을 생략하면 무한 반복문
public class ex4_8 {

	public static void main(String[] args) { 
		int i=1 ; // 초기화 선언
		
		for (; ; ) { // 조건식 생략 - true로 간주되어 무한반복문이 됨
			System.out.println(i);		
		}
	} 
}

2) 중첩 for문 

  • for문 안에 다른 for문을 포함 (여러개 가능)
  • 안쪽 for문이 먼저 재생 -> 바깥쪽 for문 재생 -> out
public class ex4_11 {

	public static void main(String[] args) {
		
		for (int i = 2; i<=9 ; i++) {  // i = 2단 ~ 9단까지 출력
			for (int j = 1; j <= 9; j++) { // j = 각 단을 1 ~ 9까지 곱하기
				System.out.println(i+" * "+j+" = "+(i*j));		
			}
			System.out.println(); // ()공란일 경우 줄바꿈
		}
	}
}

 

 

(1) 동일한 개수 반복

// 1) 원초적인 방법
    System.out.println("**********");
    System.out.println("**********");
    System.out.println("**********");
    System.out.println("**********");
    System.out.println("**********");
		
// 2) 반복문을 활용 해서 아래처럼 변경
    for (int i = 1; i <= 5; i++) {
        System.out.println("**********");
    }
		
// 3) 중첩 반복문을 활용하여 아래 처럼 변경(수정이 용이)
    for (int i = 1; i <= 5; i++) { // 아래의 for문을 5번 반복
        for (int j = 1; j <= 10; j++) { // * 10번 반복
            System.out.print("*"); // * 1줄로 10개 찍기위해 print로 출력
        }
        System.out.println(); // 줄바꿈
    }
    
출력값
**********
**********
**********
**********
**********

 

(2) 순차적으로 증가

for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= i; j++) { // j 를 i의 개수만큼 * 찍기
        System.out.print("*");
    }
    System.out.println();
}

출력값
*
**
***
****
*****

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의