공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 


Math.random( )을 활용한 로또번호 뽑기

 Math.random() 함수를 이용해서 랜덤으로 로또번호를 뽑는 프로그램이다.  random() 함수는  double 형으로  0 <= random() < 1 의 범위의 난수를 반환한다. 원하는 결과를 얻기 위해서 값에  45 를 곱하고  1 을 더했다.

 

 Math.random( )  :  0 <= random < 1 범위의  double 형 난수를 반환

 

원하는 정수형 난수 값 범위 계산(1 ~ 45인 경우)
1. 원래의 범위
0 <= Math.random( ) < 1

2. 원하는 범위의 최대값을 양쪽에 곱해준다.( x45 )
(0 x 45) <= Math.random( ) < (1 x 45)
= 0 <= Math.random( ) < 45
→ 완성된것 같지만 이대로 두면 최대값인 45가 안 나온다! ( < 45 이기 때문에 !)


3. 원하는 범위의 최소값을 양쪽에 더해준다 ( + 1 )
(0 + 1) <= Math.random( ) < (45 + 1)
= 1 <= Math.random( ) < 46

4. 1~3 과정을 식으로 만들고 int형으로 변환해서 사용한다.
(int)(Math.random( ) * 45)+1

 

실행결과

실행할 때마다 번호가 바뀌는 것을 확인할 수 있다.


번호를 저장할 배열( number[ ] )을 선언한다.  7 개의 번호를 저장해야 하므로 크기는  7 로 설정했다.  for 문을 이용해서 차례로 랜덤 값을 생성해 저장한다. 배열 값들을 비교하기 위해서  for 문을 한번 더 써서 이중  for 문을 만든 뒤에  while 문으로 다른 값이 나올 때까지 반복해서 랜덤 값을 생성한다. 만약 보너스 번호를 따로 출력하고 싶으면 출력을 위한  for 문에 조건식을 넣어서 출력 값을 다르게 바꿔주면 된다.

 

package test;

class test{
	public static void main(String[] args) {
	
		int[] number = new int[7];	//7개의 숫자를 저장할 배열 생성
		
		for(int i = 0 ; i < number.length ; i++) {	//배열의 길이(7)만큼 반복문 실행
			
			number[i] = (int)(Math.random() * 45) + 1;	//1 ~ 45 범위의 랜덤값을 생성해서 차례로 저장
			
			for(int j = 0 ; j <= i - 1 ; j++) {	// 현재 배열의 값(i번째)와 그 전 배열들의 값(i-1까지)을 비교하기 위한 반복문
				
				while(number[i] == number[j]) {	// 두 개의 배열값이 같을경우(다를 때까지 반복)
					number[j] = (int)(Math.random() * 45) + 1;	//값을 새로 생성한다(중복을 없애기 위한 과정)
				}
			}
		}
		
		for(int i = 0 ; i < number.length ; i++) {	//최종 배열값을 출력하기 위한 반복문
			System.out.print(number[i] + " ");	//배열의 값 출력
		}
	}
}

 

 

 

+  HashSet 을 이용하면 중복없이 자료를 저장할 수 있다.  set.size( ) 를 지정한 크기만큼 될때까지 반복하면  HashSet 은 중복을 허용하지 않기때문에 자동적으로 중복이 아닌 값들이 저장된다. 정렬을 사용하기 위해서  LinkedList 에 담은 뒤  sort 로 정렬하고 출력했다.

package Example;

import java.util.*;

public class Example {
	public static void main(String[] args) {
		Set set = new HashSet(); //HashSet 선언
				
		for(int i = 0 ; set.size() < 7 ; i++) {	
			
			set.add((int)(Math.random() * 45) + 1);	//1 ~ 45 범위의 랜덤값을 생성해서 차례로 저장
		}					//hashSet은 중복을 허용하지 않기 때문에 set.size가 지정한 개수만큼 찰 때까지 반복하면 중복값을 제외한 값들이 저장된다. 
		
		List list = new LinkedList(set);	//정렬하기 위해서 LinkedList로 저장
		Collections.sort(list);	//정렬
		System.out.println(list);
	}
}

+ Recent posts