본문 바로가기
JAVA/Java Study

[Java] 자바 난수(랜덤 숫자) 생성 : Math, Random

by ♡˖GYURI˖♡ 2024. 1. 15.

자바에서 난수를 생성하는 방법은 Math 클래스를 활용하는 방법과 Random 클래스를 활용하는 방법 두 가지가 있다.

 

두 방법의 차이점은 Math.random() 메소드는 0.0에서 1.0 사이의 double 난수를 얻는데 사용하지만, Random 클래스는 boolean, int, long, float, double 난수를 얻을 수 있다는 점이다.

 

또, Math.random()은 종자값(seed)가 현재시간으로 고정인 반면, Random 클래스는 종자값(seed)를 설정할 수 있다.

종자값 : 난수를 만드는 알고리즘에 사용되는 값, 종자값이 같으면 같은 난수를 얻는다.

 

Math.random()

public class RandomExample {
    public static void main(String[] args)  {
        System.out.println("0.0 ~ 1.0 사이의 난수 1개 발생 : " + Math.random());
        System.out.println("0 ~ 10 사이의 난수 1개 발생 : " + (int)((Math.random()*10000)%10));
        System.out.println("0 ~ 100 사이의 난수 1개 발생 : " + (int)(Math.random()*100));
    }
}

 

Math 클래스는 최상위 클래스인 Object 클래스 안에 있으므로 따로 Import 시켜주지 않아도 사용이 가능하며 Math.random() 메소드도 static이기에 바로 호출할 수 있다.

 

Math.random()의 메소드는 시드값으로 현재시간을 사용하므로 매번 실행시킬 때마다 다른 숫자가 출력된다.

Math.random() 메소드를 실행하면 실수형의 0.0 ~ 1.0 미만 사이의 무작위 실수값이 하나 리턴된다. 소수점 자리수가 무한한 무한소수의 형태로 출력되므로 무한에 가까운 경우의 수가 나타난다.

 

이를 정수형으로 가공하고 싶다면 나머지를 활용하는 방법, 곱셈을 활용하는 방법을 사용할 수 있다.

 

Math.random()을 정수로 사용하기

  • random의 값을 충분히 높여준 뒤 나머지 연산을 한다.
  • random의 값을 원하는 자리수만큼 곱한 뒤 int형으로 변환하면 소수점 단위는 자동 절삭되어 정수형으로 표현 가능하다.

 

Random 클래스 활용

import java.util.Random;

public class RandomExample {
	public static void main(String[] args)  {
        Random random = new Random(); //랜덤 객체 생성(디폴트 시드값 : 현재시간)
        random.setSeed(System.currentTimeMillis()); //시드값 설정을 따로 할수도 있음

        System.out.println("n 미만의 랜덤 정수 리턴 : " + random.nextInt(10)); 
        System.out.println("무작위 boolean 값 : " + random.nextBoolean());
        System.out.println("무작위 long 값 : " + random.nextLong());
        System.out.println("무작위 float 값 : " + random.nextFloat());
        System.out.println("무작위 double 값 : " + random.nextDouble());
        System.out.println("무작위 정규 분포의 난수 값 :" + random.nextGaussian());
    }
}

 

Random 클래스는 java.tuil 패키지 안에 있어 사용 시 Import가 필요하고 new를 통해 객체를 생성해주어야 한다.

기본 생성자를 통해 Random 객체를 생성하면 현재시간을 종자값으로 사용하고 setSeed 메서드를 통해 시드값을 따로 설정해줄 수도 있다.

 

메소드 설명
setSeed(long n) 매개값으로 주어진 종자값이 설정된다.
nextBoolean() boolean 타입의 난수를 리턴한다.
nextDouble() double 타입의 난수를 리턴한다.
nextInt() int 타입의 난수를 리턴한다.
nextInt(int n) int 타입의 0 ~ 매개값 미만까지의 난수를 리턴한다.
nextGaussian() 평균이 0.0이고 표준편차가 1.0인 정규분포 난수를 리턴한다.

 

 

 

 

 


 

 

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

자바에서 난수를 얻어내는 방법은 Random클래스를 활용하는 방법과 Math클래스를 활용하는 방법 2가지가 있습니다. 두 방법의 차이점은 Math.random() 메소드는 0.0에서 1사이의 double 난수를 얻는데만

coding-factory.tistory.com

 

'JAVA > Java Study' 카테고리의 다른 글

[Java] 정수 제곱근 판별  (0) 2024.01.28
[Java] HashMap  (0) 2024.01.15
[Java] 아스키 코드  (0) 2024.01.11
[Java] StringBuffer 개념과 사용법  (0) 2024.01.11
[Java] throw와 throws는 언제 사용하는 것일까?  (1) 2024.01.09