Random클래스?
무작위의 수를 얻기 위한 방법을 생각하면 먼저 Math.Random()이 떠오른다.
이 외에도 Random클래스를 이용하여 무작위의 수를 얻을 수 있다.
double randomNum = Math.random();
double randomNum = new Random().nextDouble(); // 위의 문장과 동일
int num = (int)(Math.random() * 10) + 1; // Math.random()으로 1~10의 정수를 얻기 위한 코드
int num = new Random().nextInt(10) + 1; // Random클래스로 1~10의 정수를 얻기 위한 코드
Math.random과 Random클래스의 차이점
Math.random은 언제 어디서나 실행을하면 항상 규칙성이 없이 다른 수가 나온다.
하지만 Random클래스를 몇번 실행해 보면 어느 반복되는 것을 느낄수 있다
그 이유는 랜덤함수라 하더라도 일정한 규칙성을 가지기 때문이다.
하지만 Random클래스는 이 시드값을 설정해 줄 수 있기 때문에 랜덤 함수에서
같은 수가 반복되어 나오는걸 방지 할수 있다.
그래서 seed 값을 중간에 변경해 주어서 반복되는 것을 막고자 할때 많이 사용되어 진다.
seed값은 처음 생성자에 넣어서 만들어 줄 수도 있고
//생성자
Random() // System.currentTimeMillis()을 seed로 이용하는 Random인스턴스 생성
Random(long seed) // 내가 원하는 시드 설정 가능.
코드의 흐름 중간에도 메소드를 이용해 seed값을 변경해 줄 수 있다.
// 메소드
setSeed(long seed)
그리고 이 시드 값은 변경될 때마다 계속해서 변화가 이루어져야 함으로
현재시간을 천분의 1초단위로 변환해서 반환해주는 System.currentTimeMillis()를 사용한다.
setSeed(System.currentTimeMillis());
Random클래스의 생성자와 메서드
메서드 | 설명 |
Random() | System.현재시간을 시드로 이용하는 Random인스턴스를 생성한다. |
Random(long seed) | 매개변수seed를 시드값으로 하는 Random인스턴스를 생성한다. |
boolean nextBoolean() | boolean타입의 난수를 반환한다. |
void nextBytes(byte[] bytes) | bytes배열에 byte타입의 난수를 채워서 반환한다. |
double nextDouble() | double타입의 난수를 반환한다. (0.0 <= x < 1.0) |
float nextFloat() | float타입의 난수를 반환한다. (0.0 <= x < 1.0) |
double nextGaussian() | 평균은 0.0이고 표준편차는 1.0인 가우시안(Gaussian)분포에 따른 double형의 난수를 반환한다. |
int nextInt() | int타입의 난수를 반환한다.(int의 범위) |
int nextInt(int n) | 0 ~ n의 범위에 있는 int값을 반환한다. (n은 범위에 포함되지 않음) |
long nextLong() | long타입의 난수를 반환한다. (long의 범위) |
void setSeed(long seed) | 시드값을 주어진 값(seed)로 변경한다. |
댓글