Day6 - 0730
중첩 반복문
- 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 : 업다운 게임