[Java] 로또 프로그램 난수 생성기 !! (중복체크)
java util 패키지를 이용해서 중복없는 로또 프로그램 만들기~!!
import java.util.*;
public class LottoNumber {
public static void main(String[]args){
int[] numbers = new int[6];
Random gen = new Random();
for(int i =0 ; i<6 ; i++ ){
numbers[i] = gen.nextInt(45)+1; //난수생성
for(int j = 0; j < i; j++){ //중복체크를 위해 for문 한번 더 돕니다. 대신 j 는 i 보다 작을동안..
if(numbers[i] == numbers[j]){ //numbers[i] 번째에 생성된 난수와 그전에 생성된 numbers[j] 난수와 같은게 있나 비교합니다.
i = i-1; //같은게 있다면 i-1 해주어 현재 자리에 새로 난수를 발생 시키도록 합니다.
break; //같은수가 발견되었다면 현재 for 문을 나가고 위에 for 부터 다시 돕니다.
}
}
}
for(int a =0 ; a <6; a++){
System.out.println("행운의숫자 : "+numbers[a]);
}
}
}
/*
헷갈리시다면 그림을 그려보세요
ex) 현재 numbers배열에
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
까지 생성되어 있고
numbers[5] = 5;
마지막 자리에 5가 생성되었다고 가정하면
두번째 for을 돌때 같은값이 있으니까 if문에 걸리게 되죠
numbers[5] = 5 == numbers[0] = 1
numbers[5] = 5 == numbers[1] = 2
numbers[5] = 5 == numbers[2] = 3
numbers[5] = 5 == numbers[3] = 4
numbers[5] = 5 == numbers[4] = 5
이런식으로 비교를 하는데 numbers 배열 4번째 값과 5번째 값이
같으니 if문에 걸려 i-1 해주고 현재 for문을 나갑니다.그럼 i값이 5-1 이 되니
4가 되어 다시 돌때는 4부터 도는게 아니라 i++ 증감식 때문에 5가 되어
중복되었던 자리에 새로운 난수를 넣은후 중복되는 수가 없을때 까지 위에 과정을 반복 합니다.
잘 이해가 가지 않으신다면 System.out.println(); 으로 찍어서 디버깅 하세요 ^^
*/