Random 클래스의 생성자
목화
random클래스에 대해 조사하고 있습니다.
random클래스의 생성자에 대해서 궁금한데요.
일단 소스부터 보여드릴께요.
import java.util.*;
public class arraynew {
public static void main(string[] args) {
int []a;
random rand=new random(47);
a=new int[rand.nextint(20)];
system.out.print(length of a=+a.length);
system.out.print(arrays.tostring(a));
}
}
결과값은 length of a=18[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]항상!!! 이렇게 나옵니다.
여기서 궁금한것은요 random클래스의 nextint()메소드가 랜덤한 숫자를 리턴하는데 어째서 18이라는 값만 리턴하는지가
궁금합니다.생성자의 인자 값을 바꾸면 무슨 공식에 의해서 인지는 몰라도 nextint()메소드의 의해서 리턴되는 값이 바뀌는데요.
random rand=new random(37)
이렇게 쓰면 리턴은 5가 됩니다.결과값은 length of a=5[0, 0, 0, 0, 0]이렇게 항상 똑같이나옵니다.
생성자의 인자를 seed라고 하던데 정확히 잘 모르겠네요.어떻게 해서 18이라는 값만 리턴이 되는지 너무 궁금합니다.
분명히 random클래스의 생성자의 인자가 연관이 있는것 같은데 도저히 감을 못 잡겟네요.api를 뒤져도 봤는데 이해가
안되네요.설명 좀 부탁드릴께요~!그리고 random클래스의 인자가 있는 생성자는 어떠한 경우에 주로 쓰나요?
거의 인자가 없는 생성자로 써서 랜덤한 숫자를 원할때 쓰는데 인자가 있는 생성자는 처음이라 좀 어렵네요.
-
조롱목
seed 를 사용하면 같은값이 나오더군요. 왜 그런지 잘 모르겠지만요 ^^;
지정된 seed 범위에 해당하는 값을 random 이 생성하는것 같더군요.
seed 가 없으면 random seed 를 기준으로해서 random 값을 생성하겠죠. 그냥 제 생각입니다.
seed 를 변경하시던가... seed 없는 생성자를 사용하시면 될것 같네요. -
푸헷
a=new int[rand.nextInt(20)]; 이부분은 int a = new int[18]과 같이 배열크기만 선언해주는부분입니다.
따라서
Random rand=new Random();
int []a = new int[20];
for(int i = 0; i20; i++){
a[i] = rand.nextInt(46)+1; // 1~46까지 숫자
}
이렇게 수정해주시면되는데 배열에 같은값이 들어갈수있으므로 체크하는 부분도 구현해주셔야합니다.