본문 바로가기
JAVA

중복없는 난수 생성 , 로또 번호 생성활용

by helloissue 2021. 10. 19.

좋은 꿈을 꾸고 나서 간단하게 로또 번호 생성기를 만들어봐야겠다고 느꼈다. 어떻게 하면 자바로 로또 번호 생성기를 만들고 , 중복이 없는 난수 생성을 통해 로또번호 생성으로 활용하는지 알아보자.

 

로또복권
로또복권


1. 자바기본 API에서 제공하지 않는 중복 없는 난수 생성을 만들어보자

 

자바 API에서는 중복을 제거하고 나오지 않기때문에, 다음 하단과 같이 중복이 발생할 경우 다시 랜덤 함수를 호출하여 중복을 제거할 수 있었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int iPlusSize        = 0// 추가할 난수 생성 범위    
int iRanSize         = 20;  // 생성할 난수의 갯수
int iAsRan[]         = new int[ iRanSize ];
int iTemp            = 0;
 
//중복 없는 난수생성
forint i=0; i < iAsRan.length; i++ ) {
    
    iTemp         = ( int )( Math.random() * ( iAsRan.length + iPlusSize )) + 1  ;  
//+1 : 0을 제외하기
    
    iAsRan[ i ] = iTemp;
    
    forint j=0; j < i; j++ ) if( iAsRan[i] == iAsRan[j] ) { i--break; } 
//중복제거
    
}
 
//랜덤생성된번호들 출력
forint ii : iAsRan )  System.out.print(" " + ii ); 
// 14 11 8 18 7 4 17 5 16 15 6 9 1 2 3 20 13 10 12 19
 
 

 

2. 이를 활용하여 로또번호생성을 하자.

히스토리 이력까지는 아니더라도, 호출할 때마다 7개의 랜덤 한 로또번호를 다음과 같이 수정함으로써 생성이 가능하게 수정을 하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int iPlusSize        = 38;//추가할 난수 생성 범위    
int iRanSize         = 7//생성할 난수의 갯수
int iAsRan[]         = new int[ iRanSize ];
int iTemp            = 0;
boolean bChk         = false;
String sNonExist     = ""//제외된 번호 목록
 
//중복 없는 난수생성
forint i=0; i < iAsRan.length; i++ ) {
    
    iTemp         = ( int )( Math.random() * ( iAsRan.length + iPlusSize )) + 1  ;  
    //+1 : 0을 제외하기
    
    iAsRan[ i ] = iTemp;
    
    forint j=0; j < i; j++ ) if( iAsRan[i] == iAsRan[j] ) { i--break; } 
    //중복제거
}
 
//제외된 번호 찾기
for(int i= ( 0 + 1 ); i< (( iAsRan.length + iPlusSize ) + 1 ); i++ ) { 

bChk    = false;
    
    forint ii : iAsRan ) { if( ii == i ) { bChk = truebreak; }} 
 
    if!bChk ) {    sNonExist = sNonExist + "," + String.valueOf( i ); }
}
 
if! "".equals( sNonExist ) ) { sNonExist = sNonExist.replaceFirst(",","");    }
if! "".equals( sNonExist ) ) { System.out.println("제외된 번호들 : " +sNonExist); }
 
// 랜덤생성된번호들 출력
forint ii : iAsRan )  System.out.print(" " + ii ); 
 
// 제외된 번호들 : 1,2,3,...
// 31 40 34 14 6 38 26
cs

 

마치면서.  도움이 되셨다면 하트를 꾹꾹 눌러주시기를 바랍니다.

댓글