본문 바로가기
Old Posts/Java

[Java] 자바 난수(랜덤숫자) 생성하기

by A6K 2021. 6. 30.

자바 프로그램에서 랜덤 숫자를 생성하기 위해서 Random 클래스를 사용하거나 Math 클래스를 사용할 수 있다.  Random 클래스를 사용할 경우 boolean, int, long, float, double 타입의 랜덤 값을 얻을 수 있으며, Math 클래스를 사용할 경우 0.0에서 1.0 사이의 double 타입 난수를 얻을 수 있다.

Math.random()

Math 클래스에는 랜덤 숫자를 얻어올 수 있는 random() 메소드가 정의되어 있다. 

System.out.println("0.0 ~ 1.0 Random Value : " + Math.random());

Math 클래스는 Object 클래스에 정의되어 있으므로 따로 import 할 필요는 없다. Math.random() 메소드는 시드값으로 현재 시간을 사용한다. 따라서 매번 실행할 때마다 다른 숫자가 출력된다. 출력되는 숫자는 double 타입이며, 0.0~1.0 사이의 값이 무작위로 선택되어 출력된다.

만약 정수타입의 랜덤값을 얻고 싶다면, 모듈러연산('%')을 통해서 double 타입의 랜덤값을 가공한다음 타입 캐스팅을해서 사용하면 된다.

Random 클래스

Random 클래스는 java.util 패키지에 정의되어 있다. java.util.Random 클래스를 import 해서 사용할 수 있다. Math.random() 메소드와 달리 랜덤 값을 생성해주는 객체를 생성해줘야한다.

Random random = new Random();
random.setSeed(System.currentTimeMillis());


System.out.println(random.nextInt(10));
System.out.println(random.nextBoolean());
System.out.println(random.nextLong());
System.out.println(random.nextFloat());
System.out.println(random.nextDouble());
System.out.println(random.nextGaussian());

Random 클래스에는 next로 시작하는 메소드들이 정의되어 있다.

Method 설명
setSeed(long n) 시드값으로 설정
boolean nextBoolean() boolean 타입의 랜덤 값 생성
double nextDouble() double 타입의 랜덤 값 생성
int nextInt() int 타입의 랜덤 값 생성
int nextInt(int n) 0~n 까지의 랜덤 값 생성
double nextGaussian() 평균이 0.0이고 표준편차가 1.0인 정규분포 랜덤 값을 생성

Seed 값을 적당히 주고, next 류의 메소드를 이용해서 필요한 타입의 랜덤 값을 뽑아서 사용하면 된다.

댓글