로또 게임 만들어보기
먼저 45개의 배열의 방을 만들어준다.
public class Main_lotto_01 {
public static void main(String[] args) {
/*
int ball ==> 1, 2, 3, 4, 5, 6, ... 43, 44, 45
==> 101, 102, 103, 104, 105, 106, ... 143, 144, 145
int[] ball_arr = new int[45];
---------------------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | .... | 42 | 43 | 44 |
---------------------------------------------------
*/
int[] ball_arr = new int[45];
그 다음 만들어진 배열의 요소(방)마다 데이터값을 입력해준다.
// ball_arr 배열의 요소(방)마다 데이터값 입력하기
for(int i=0; i<ball_arr.length; i++) {
ball_arr[i] = i+1;
}
/*
----------------------------------------------
값 ==> | 1 | 2 | 3 | 4 | 5 | 6 | .... | 43 | 44 | 45 |
----------------------------------------------
index ==> 0 1 2 3 4 5 42 43 44
*/
그리고 기존에 뽑았던 공의 방번호(배열의 index)를 기억시켜두는 용도로 5개의 방을 가진 새로운 배열을 만들어준다.
int[] temp_arr = new int[5]; // 기존에 뽑았던 공의 방번호(배열의 index)를 기억시켜두는 용도
for(int i=0; i<temp_arr.length; i++) {
temp_arr[i] = -1;
}
만약 위와 같이 -1 로 초기화를 해주지 않으면 모두 0으로 초기화가 된다.
꺼내온 공의 방번호(index)가 0(실제는 1번공)이라면
이미 뽑은 공이라고 보기 때문에 문제가 발생한다.
그래서 배열의 방번호(index)로 사용되지 않는 숫자인 -1 로 모두 초기화한다.
공의 방번호(배열의 index)를 꺼내는 작업을 6번 반복한다.
0부터 44 까지인 index 를 랜덤하게 6개를 뽑아오도록 한다.
즉 0 ~ 44까지 난수를 발생시킨다.
계획)
첫번째로 뽑은 index가 3 ball_arr[ 3] ==> 실제 공번호 4
-------------------------
temp_arr 값 ==> | -1 | -1 | -1 | -1 | -1 |
-------------------------
###temp_arr 값은 기본값인 0 으로 초기화하면 안되고(중복 발생)
배열의 방번호(index)로 사용되지 않는 숫자(e.g. 음수(-1))로 초기화 해야 한다. ###
두번째로 뽑은 index가 5 ball_arr[ 5] ==> 실제 공번호 6
------------------------
temp_arr 값 ==> | 3 | -1 | -1 | -1 | -1 |
------------------------
세번째로 뽑은 index가 0 ball_arr[ 0] ==> 실제 공번호 1
-------------------------
temp_arr 값 ==> | 3 | 5 | 0 | -1 | -1 |
-------------------------
네번째로 뽑은 index가 5 ball_arr[ 5] ==> 실제 공번호 6 ( 중복!! )
네번째로 뽑은 index가 3 ball_arr[ 3] ==> 실제 공번호 4 ( 중복!! )
네번째로 뽑은 index가 8 ball_arr[ 8] ==> 실제 공번호 9
-------------------------
temp_arr 값 ==> | 3 | 5 | 0 | 8 | -1 |
-------------------------
다섯번째로 뽑은 index가 2 ball_arr[ 2] ==> 실제 공번호 3
-------------------------
temp_arr 값 ==> | 3 | 5 | 0 | 8 | 2 |
-------------------------
여섯번째로 뽑은 index가 8 ball_arr[ 8] ==> 실제 공번호 9 ( 중복!! )
여섯번째로 뽑은 index가 44 ball_arr[44] ==> 실제 공번호 45
Random rnd = new Random();
String result = "";
outer:
for(int i=0; i<6; i++) {
// 랜덤한 정수 = rnd.nextInt( 마지막수 - 처음수 + 1) + 처음 수;
int idx = rnd.nextInt(44 - 0 + 1) + 0; // 0 ~ 44 중 랜덤한 수
// 위에서 얻어온 랜덤한 정수 idx가 이미 뽑은 것인지 처음으로 뽑은 것인지 비교
for(int j=0; j<temp_arr.length; j++) {
if( idx == temp_arr[j] ) {
i--; // i 를 감소시키지 말고 유지하기
// continue; 가장 가까운 증감식으로(j++) 이동한다.
continue outer; // continue outer; 레이블명이 outer인 반복문의 증감식(i++)으로 이동한다.
}
} // end of for
if(i<5) {
temp_arr[i] = idx; // 뽑은 방번호(index)를 저장시켜둔다.
}
String str = (i<5) ? "," : "" ;
result += ball_arr[idx]+str; // 4,6,1,9,3,45
} // end of for
System.out.println("\n로또 1등 당첨번호: " + result);
} //end of main()
}