배열-로또번호 생성기
지금까지 배운것들과 배열을 사용해서 로또번호 생성기를 만들어보려고한다.
먼저. 로또에 대해서 간단히 설명하겠다.
1번부터 45번까지의 번호를 랜덤으로 뽑으며
1등은 6개
2등은 5개 +보너스번호
3등은 5개
4등은 4개
5등은 3개
나머지는 낙점이다.
바로 예제를 보자
//1 부터 45번의 공을 모두 가진다.
int[] lottoMachin = new int [45];
//선택된 로또 번호를 저장할 배열
int[] lottoBalls = new int[6];
//보너스번호 저장
int bonusNumber = 0;
//1~45개의 공을 생성 Index는(0~44)
for (int i=0;i<lottoMachin.length;i++) {
lottoMachin[i] = i+1;
}
int count = 0;
while(count < 7) {
//공을 선택하는 위치를 랜덤함수로 골라보자!
int index = (int)(Math.random()*45);
//선택된 index 의 값이 0 이 아니면 미사용..0이면 사용한 위치
if(lottoMachin[index] != 0) {
if(count <6) {
lottoBalls[count++] = lottoMachin[index];
}else{
bonusNumber = lottoMachin[index];
count++;
}
//사용을 했다는 의미
lottoMachin[index]=0;
}
}
for(int i=0;i<lottoBalls.length;i++) {
System.out.print(lottoBalls[i]+" ");
}
System.out.println("보너스 번호:"+bonusNumber);
//사용자가 선택!
count = 0;
Scanner scan =new Scanner(System.in);
//사용자 로또 저장 배열
int[]userLotto = new int[6];
while(count<6) {
System.out.println((count+1)+"번째 로또 번호! :");
int balls = scan.nextInt();
//중복체크
for(int i=0;i<count;i++) {
if(userLotto[i]==balls) {
System.out.println(balls+"는 이미 존재하는 번호입니다.");
balls = 0; //중복되었다는 의미
break;
}
}
//0 은 중복의 의미
if(balls !=0) {
userLotto[count++] = balls;
}
}
scan.close();
System.out.println("사용자 로또 : ");
for(int i=0; i<lottoBalls.length;i++) {
System.out.printf(userLotto[i]+" ");
}
System.out.println();
int machCount = 0;
boolean isBonus = false;
for(int i=0; i<userLotto.length;i++) {
for(int j=0; j<lottoBalls.length;j++) {
if(userLotto[i]==lottoBalls[j]) {
machCount ++;
break;
}
}
//보너스번호 맞는것 찾기
if(!isBonus) {
if(userLotto[i]==bonusNumber) {
isBonus = true;
}
}
}
if(machCount == 6) {
System.out.println("1등~");
}else if(machCount ==5 && isBonus) {
System.out.println("2등~");
}else if(machCount ==4) {
System.out.println("3등~");
}else if(machCount == 3) {
System.out.println("4등~");
}else {
System.out.println("낙점");
}
}
for (int i=0;i<lottoMachin.length;i++);
lottoMachin[i] = i+1;
lottoMachin은 0부터 44까지의 방이있다.
i+1이 있기때문에 0번방에는 1이 들어가게된다.(반복)
0번방은1, 1번방은2, .....44번방은 45가 들어가게된다.
while(count < 7) {
int index = (int)(Math.random()*45);
공을 6개 뽑는다
index변수에 뽑은 값을 넣는다.(반복)
예를 들어서 0,5,39,20,23,39,22 를 뽑았다고 가정하자
if(lottoMachin[index] != 0) {
if(count <6) {
lottoBalls[count++] = lottoMachin[index];
}else{
bonusNumber = lottoMachin[index];
count++;
lottoMachin[index]=0;
}
첫번째로 0을 뽑았다.
lottoMachin[0] 의 값은 1이다.
즉 0이 아니기에 조건이 충족되어 if문이 돌아간다.
lottoBalls[count++] = lottoMachin[0]
해석해보면
lottoMachin[0]의 1값이 lottoBalls[count++]안으로 들어가는것인데
count값을 0으로 초기화 해주어서 lottoBalls[0]이 되고 그 안에 1이 들어가게되는것이다.
그리고 뽑은 숫자를 또 중복해서 뽑으면 안되기때문에
lottoMachin[index]=0 를 해줘야한다.
처음에 0을뽑고 lottoMachin안에 값을 넣어준 후
lottoMachin[index]=0 하게되면
index[0]=1 이였지만 index[0]=0 으로 바뀌게 된다.
그렇게되면 다시한번 0을 뽑아도 if조건에 충족되지않기에
index 값을 다시뽑게 되는것이다.
현재 상황 그림참고.(마지막 번호 22는 보너스 번호이다.)
0 5 39 20 23 29 22
그리고 6개 까지 index값을 뽑게되면
if(count <6)인해서
else{bonusNumber = lottoMachin[index]; 가 실행되게 된다.
마지막 값이 bonusNumber변수에 들어가게된다.