Luver Duck 2022. 8. 1. 20:55

중첩 반복문

- for 구문을 여러번 사용하여 반복문을 만들 수 있다

- 반복문의 중첩은 2개까지 허용하며 그 이상은 비효율적이다

for(int j = 0 ; j < 60 ; j++) {
	for(int i = 0 ; i < 60 ; i++) {
    
	}
}

1) 먼저 가장 안쪽에 있는 for 반복문에서 반복수 i가 0부터 60이 될 때까지 1씩 증가하며 반복한다

2) 반복수 i가 60이 되면 밖의 for 반복문에서 반복수 j가 1 증가한다

3) 이 과정을 반복하여 반복수 j가 0부터 60이 될 때까지 1씩 증가하며 반복한다

 

 

** 중첩 반복문 응용 : 하루를 [sec] 단위로 매 초 전부 다 표시하는 방법

for(int hour = 0; hour < 24 ; hour++) {
	for(int min = 0; min < 60; min++) {
		for(int sec = 0; sec < 60; sec++) {
			System.out.println(hour + "시 " + min + "분 " + sec + "초");
		}
	}
}

- 반복수 sec가 0부터 60까지 1씩 증가하며 커진다 (반복수의 범위 60 미만)

- 반복수 sec가 59를 넘는 순간이 되는 순간 반복수 min이 1만큼 증가한다

- 이런 과정을 반복하여 반복수 min이 59를 넘는 순간 반복수 hour가 1만큼 증가한다

- 이런 과정을 반복하여 반복수 hour가 23을 넘는 순간 반복을 종료한다

- 매 반복 과정에서 hour + "시 " + min + "분 " + sec + "초 "를 표시하므로 0시 0분 0초부터 23시 59분 59초까지 표시

 

 

day06 - loop2 - Test01 : 

 

 

while 반복문

int n = 0;
while(n <= 10) {
	n++;
}

- 초기 조건 입력 (for의 선언부 역할) : int n = 0;

- 반복 조건 입력 (for의 조건부 역할) : while(n <= 10) {}

- 증감 조건 입력 (for의 증감부 역할) : n++;

 

 

day06 - loop3 - Test01

 

 

while을 이용한 무한 반복문 ★

while(true) {

	반복 내용
			
	if(구문 탈출 조건) {
		break;
	}
}

- while(true) {반복 내용} : 반복 내용을 무한히 반복하는 무한 반복문

- if(구문 탈출 조건){break;} : 특정 조건을 만족할 경우 반복문 탈출

** while(true) 구문에서 구문 탈출 명령 break;이 없는 경우 so.close();에 문제 표시 (종료 조건을 명시해야 한다)

 

 

day06 - loop3 - Test02

day06 - loop3 - Test03 : 숫자 모래성 게임

 

 

do ~ while 반복문

do {

	내용
    
}

while(조건);

- 조건의 참·거짓과 관계없이 적어도 한번 실행한 이후 조건 만족 여부에 따라 반복을 결정 (선 입력, 후 검사)

- do ~ while 반복문의 문제점

1) do 안에서 만든 변수는 while에서 사용할 수 없다

2) while 끝에 반드시 세미콜론(;)을 입력해야 한다

3) while문으로 완전히 대체할 수 있다

 

day06 - loop4 - Test01

 

랜덤 (Random)

- 난수 (무엇이 나올지 예측되지 않는 값)

- 확률적인 형태를 구현할 수 있다

 

1) Math.random()

- 0.0 이상 1.0 미만의 double을 무작위로 만드는 명령

double 변수명 = Math.random();

 

- Math.random으로 만든 난수의 범위 제한

double 변수명 = (int)(Math.random() * 갯수) + 조정값;

 

 

- Math.random으로 만든 난수의 범위를 조정하는 과정 (ex : 1부터 10 사이의 난수 발생)

double a = Math.random();				// 1) 생성된 double은 0.0에서 1.0 사이
			
double b = a * 10;					// 2) 10을 곱하면 0.0xxx...에서 9.0xxx... 사이
			
int c = (int)b;						// 3) int로 형 변환(소수점 버림)하면 0에서 9 사이
			
int d = c + 1;						// 4) 1을 더하면 1에서 10 사이
			
double e = (int)(Math.random() * 10) + 1;		// 5) 1에서 10 사이에서 생성되는 난수

- double e = int(Math.random() * 10) + 1;에서

  갯수 : 생성되는 난수는 0부터 9 사이인 총 10개

  조정값 : 최소값과 최대값 각각에 1을 더해서 난수의 생성 범위를 1부터 10까지로 조정한다

 

2) Random 사용

Random r = new Random();		
		
int 변수명 = r.nextInt(갯수) + 조정값;

- 불러오기 구문 필요 : import java.util.Random; 

- close구문 불필요

- 난수의 생성 범위를 제한하는 원리는 Math.random와 동일하다

 

 

day06 - random - Test01 : 

day06 - random - Test02 : 주사위 / 로또 / OTP / 동전 결과

day06 - random - Test03 : 랜덤 구구단

day06 - random - Test04 : 랜덤 구구단 (3회 틀리면 게임오버)

day06 - random - Test05 : 주사위를 100번 던져 홀짝 갯수

day06 - random - Test06 : 부루마블 무인도 탈출

day06 - random - Test07 : 업다운 게임