알버트의 개발하는 블로그

자바 제12강 : 자바 랜덤 난수 (Random) 이용해서 로또 번호 뽑기 본문

프로그래밍 언어/Java

자바 제12강 : 자바 랜덤 난수 (Random) 이용해서 로또 번호 뽑기

알버트 2021. 9. 10. 09:28

 

이번 시간에는 자바에서 제공하는 랜덤 난수 기능을 이용하여 로또 번호를 뽑는 프로그램을 짜보겠습니다.

c++에서도 랜덤 난수 기능이 있었는데요. 자바에서 이 기능이 좋아서 그대로 가져갔습니다. 하지만 쓰는 방법은 좀 달라졌습니다. 자바에서 랜덤 난수를 쓰는 방법을 로또 번호 생성프로그램을 통해 배워보겠습니다.

 


로또 번호 뽑기 프로그램

 

 

import java.util.Random;	//랜덤난수 패키지 포함

public class randomTest {
	public static void main(String[] args) {
				
		//랜덤 난수를 생성해주는 코드
		Random random = new Random();	
		
		int[] lotto = new int[45];	//45개짜리 lotto배열 생성
		for (int i =0; i< lotto.length ; i++)	//45번 반복
		{
			lotto[i] = i+1;	//각 원소에 1부터 45까지의 숫자 저장
		}
		show(lotto);
		System.out.println("=============== 섞기 전 ===============");
		
		for (int i = 0; i< 10000; i++ )	//반복 10000번 실행
		{
			int n = random.nextInt(44) + 1;//n에 1부터 44중 랜덤난수 저장
			int m = lotto[0];	
			lotto[0] = lotto[n];
			lotto[n] = m;	//lotto[0]과 lotto[난수]의 수 바꾸기 코드
		}
		show(lotto);
		System.out.println("=============== 섞은 후 ===============");
		
//		1등 번호를 출력한다.
		System.out.print("1등 번호 : ");
		for (int i =0; i< 6; i++)	//1등번호 6개 뽑는 반복문
		{
			System.out.print(lotto[i] + " ");
			try {
				Thread.sleep(1000);	//1초씩 쉬면서 로또번호 추첨
			} catch (InterruptedException e) {
				e.printStackTrace();	//예외 처리 구문
			}
		}
		System.out.println("보너스 번호 : " + lotto[6]);
	}

	private static void show(int[] lotto) {	//show() 함수 구현
		for (int i =0; i< lotto.length ; i++)	//45번 반복
		{
			System.out.printf(" %2d ", lotto[i]);	//로또배열원소출력
			if (i % 10 == 9 || i+1 == lotto.length)	
			{
				System.out.println();//10번 반복되거나 마지막 수면 엔터
			}
		}
	}
}

 

코드를 이와 같이 짜보았습니다.여기서 중요한 부분이 바로 랜덤난수를 생성하는 부분과 숫자를 섞는 코드입니다.

랜덤난수는 Random random = new Random() 으로 생성해주었습니다. 현재 시간에 맞는 랜덤 난수를 생성하는 부분입니다.

숫자를 섞는 코드는 배열의 0번째 원소(배열에선 0번이 1번)와 1번째~44번째 원소중에 하나의 원소를 뽑아서 바꿔주었습니다. 한번 실행해보겠습니다.

 

이와 같이 로또 번호를 추첨하는 프로그램이 정상적으로 실행되는 것을 볼 수 있습니다.

 

 

이처럼, 확률성이 들어가 있는 프로그램을 짤 때는 랜덤 난수가 유용하게 사용되는 것을 알 수 있습니다.

랜덤 난수를 잘 사용하면 프로그래밍을 더 효율적으로 짤 수 있습니다. 읽어주셔서 감사합니다