Random클래스는 난수를 발생시키는 데 사용되는 클래스입니다.

이 클래스는 Math클래스의 random메소드보다 다양한 방법으로 난수를 생성 할 수 있습니다.

 

Random클래스의 생성자는 두가지 형태가 있습니다.

파라미터를 받지 않는 Random()과 long타입의 파라미터를 받는 Random(long seed)이 있습니다.

이후 예제에서 알수 있지만, 파라미터를 받지 않는 랜덤클래스를 생성하면 규칙없이 생성마다 난수 생성 순서가 다릅니다.

하지만 long타입으로 파라미터를 받는 클래스를 생성하고, 이후에 똑같은 파라미터를 받는 다른 객체를 생성하더라도 같은 순서대로 난수가 발생합니다.

 

Random클래스의 메소드

 

 메소드

설명 

 int nextInt()

 int 타입 난수를 리턴

 long nextLong()

 long 타입 난수를 리턴 

 float nextFloat()

 0이상 1미만의 float 타입 난수를 리턴

 double nextDouble()

 0이상 1미만의 double 타입 난수를 리턴 

 boolean nextBoolean()

 true와 false 값 중 하나를 리턴

 int nextInt(int n)

 0이상 n미만의 int타입 난수를 리턴

 void nextBytes(byte[]arr)

 파라미터로 주어진 배열을 난수로 채움

 double nextGuausian()

 평균 0.0, 표준편차 1.0으로 정규분포된 난수를 리턴

 

 

Math클래스의 random()메소드를 사용하는 난수발생 프로그램

class MathEx3 {
	public static void main(String[] args) {
		System.out.println(Math.random()); //소수형태로 난수가 출력된다
		System.out.println(Math.random());
		System.out.println(Math.random()); 
		//0~9까지의 난수를 출력하고(혹은 사용하고) 싶다면 *10을 해주면 된다
		int num1 = (int)(Math.random()*10);
		//0~99까지의 난수를 발생시키고 싶다면 *100을 해주면 된다
		int num2 = (int)(Math.random()*100);
		System.out.println(num1);
		System.out.println(num2);
		
	}
}

 

0.3788825342529297
0.6315888448308676
0.9014608433639933
7
69

Math클래스에서는 난수를 0~9, 0~99, 0~999 이런식의 난수를 발생할 수는 있지만, 주사위처럼 특정 범위를 주어서 난수를 만드는데는 제한이 됩니다.

 

 

Random클래스를 사용하는 난수발생 프로그램

package d1108;
import java.util.*;
class RandomEx1 {
	public static void main(String[] args) {
		Random random = new Random();
		System.out.print(random.nextInt(100)+" ");
		System.out.print(random.nextInt(100)+" ");
		System.out.println(random.nextInt(100));
		System.out.println("------------------");
		
		Random random2 = new Random();
		System.out.print(random2.nextInt(100)+" ");
		System.out.print(random2.nextInt(100)+" ");
		System.out.println(random2.nextInt(100));
		System.out.println("------------------");
		
		Random random3 = new Random(349L);	// 파라미터로 넘겨주는 값이 같으면, 같은순서로 난수를 발생함
		System.out.print(random3.nextInt(100)+" ");
		System.out.print(random3.nextInt(100)+" ");
		System.out.println(random3.nextInt(100));
		System.out.println("------------------");
		
		Random random4 = new Random(349L);	// 파라미터로 넘겨주는 값이 같으면, 같은순서로 난수를 발생함
		System.out.print(random4.nextInt(100)+" ");
		System.out.print(random4.nextInt(100)+" ");
		System.out.println(random4.nextInt(100));
	}
}
2 18 72
------------------
73 49 99
------------------
77 88 83
------------------
77 88 83

 

Random 객체 생성시 파라미터를 받지 않으면 순서규칙없이 무작위 난수가 발생합니다.

하지만 파라미터값이 같이 해서 Random객체를 생성해주면 난수가 발생하는 순서가 동일하게 됩니다.

위의 실행결과를 보면 첫번째와 두번째는 난수 값이 다르지만, 세번째와 네번째는 다른객체임에도 파라미터값이 같기 때문에 난수가 발생하는 순서가 같은 것을 볼 수 있습니다.

'2013 > Java' 카테고리의 다른 글

[Java] 멀티스레드 프로그램(1)  (0) 2013.11.08
[Java] 버블정렬(1)  (0) 2013.11.08
[Java] Radom클래스(1)  (0) 2013.11.08
[Java] StringTokenizer 클래스(1)  (0) 2013.11.07
[Java] 파일 입출력에 사용되는 자바 클래스들(3)  (0) 2013.11.05
[Java] 자판기 프로그램(2)  (0) 2013.10.31