java.util.Random 클래스

여러 형태의 난수를 발생시켜 제공하는 클래스이다. Math 클래스의 정적 메소드인 random() 메소드도 난수를 제공하는 메소드이지만 0.0 ~ 1.0 사이의 실수 형태만 발생하게 되므로 필요한 여러 형태의 난수를 만들어내기 위해서는 추가적인 연산들을 수행해야 한다. 그래서 자바는 여러 형태의 난수를 발생시켜주는 전용 클래스 Random 클래스를 별도로 제공하고 있다.

 


Random 클래스의 메소드

 

흔히 사용가능한 메소드는 다음과 같다.

(nextInt의 경우 매개변수 없이 실행할 경우 int의 전체 범위내에서 난수를 발생한다.)

(밑의 표에는 없지만 IntStream, DoubleStream, LongStream으로 반환하는 메소드들도 존재한다.)

(Random클래스가 아닌 Math에도 nextDouble() 메소드와 같은 역할을 하는 random()이 존재한다.)

boolean nextBoolean()

 boolean형 난수 반환 

 int nextInt()

 int형 난수 반환 

 long nextLong() 

 long형 난수 반환

 int nextInt(int n)

 0이상 n미만의 범위내에 있는 int형 난수 반환 

 float nextFloat() 

 0,0이상 1.0미만의 float형 난수 반환 

 double nextDouble() 

 0.0이상 1.0미만의 double형 난수 반환 


※ 로또 번호 생성기를 구현한다.
   프로그램이 실행되면 기본적으로 로또를 5게임 수행하는 프로그램을 구현한다.

 실행 예) 
 3 5 12 24 31 41
 1 2 8 23 36 38
 4 9 11 13 22 30
 5 10 13 15 27 40
 22 3 32 33 40 45
 계속하려면 아무 키나 누르세요...

 


 

import java.util.Random;
import java.util.Arrays;

class Lotto
{
	// 배열 변수 선언 및 메모리 할당
	// → 로또 번호를 담아둘 배열방 6칸
	private int[] num = new int[6];
	
	// private 으로 선언된 num 값을 얻어내기 위한 메소드
	// → getter
	public int[] getNum()
	{
		return num;
	}

	// 6개의 난수를 발생시키기 위한 메소드
	public void start()
	{
		Random rd = new Random();
		int n;
		int cnt = 0;
		
		jump:

		while(cnt<6)
		{
			n = rd.nextInt(45)+1;	// 1 ~ 45 중 한 개 발생

			for (int i = 0; i < cnt; i++)
			{
				if (num[i] == n)
				{
					continue jump;
				}
			}
			num[cnt++] = n;
		}
		// 정렬 메소드 호출
		sorting();
	}

	// 정렬 메소드
	private void sorting()
	{
		// Arrays 클래스의 정적 메소드 sort() 호출하며
		// 멤버인 num 을 매개변수로 넘겨주기
		Arrays.sort(num);
	}
}


public class Test151
{
	public static void main(String[] args)
	{
		// Lotto 클래스 기반 인스턴스 생성
		Lotto lotto = new Lotto();

		// 기본 5게임
		for (int i = 1; i <= 5; i++)
		{
			lotto.start();

			// 결과 출력
			for (int n : lotto.getNum())
			{
				System.out.printf("%4d", n);
			}
			System.out.println();
		}	
	}	
}

 

실행 결과

// 실행 결과
/*
   7   9  12  14  26  31
  10  11  13  25  39  42
   7   8  12  19  29  34
   9  10  13  17  19  24
   3   4  16  20  33  34
계속하려면 아무 키나 누르십시오 . . .
*/

+ Recent posts