본문 바로가기
Java

[Java] Math.random() 메서드와 비슷한 Random 클래스 / Random(Seed) / Seed란?

by bkuk 2022. 10. 5.

Math.random() 에 대한 내용은 이전 포스팅을 참고해주세요.

 

[Java] Math.ceil() 올림 / Math.floor() 내림 /Math.round 반올림 / Math.pow() 지수 / Math.random 난수( 0 <= x < 1인

Math.ceil - 올림 문법 Math.ceil( double a) 예제 System.out.println( Math.ceil(10.3)); // 11.0 출력 System.out.println( Math.ceil(10.5)); // 11.0 출력 System.out.println( Math.ceil(10.6)); // 11.0 출..

starting-coding.tistory.com


Random 클래스를 통한 객체 생성 방법

Random 참조 변수명 = new Random(Seed);

 

Seed란?

 컴퓨터는 기본적으로 난수를 만들 수 없습니다.

컴퓨터는 기본적으로 입력에 따라 정해진 값을 낼 뿐이며,

이를 전문용어로 결정적 유한 오토마타(DFA) 기계라고 합니다.

 

따라서 이러한 현상을 해결하기 위해 컴퓨터는 아래 나오는 난수 생성 알고리즘을 사용해 난수를 생성합니다.

이때 이 난수 알고리즘 실행하기 위해 쓰는 수를 Seed(씨앗)이라 부릅니다.

 

아래 코드를 보면서 설명드리겠습니다.

Random(Seed) →  Seed: 10 으로 지정했을 때

위 소스 코드를 실행시켰을 때는 같은 값만 계속 출력됩니다.

따라서 난수 생성의 목적은 계속 다른 값이 나오는 것인데, 입력한 Seed가 같다면 같은 값만 나오면 의미입니다.

 

이를 해결하기 위해 Seed 값을 대표적으로 지속적으로 바뀌는 현재 시간을 사용해 난수가 계속 바뀌도록 할 수 있습니다.

그러므로 Seed 값을  현재 시간 값이 나오게 해주는

System.currentTimeMillis() 지정해주면 진정한 난수가 출력됩니다.

 

  • .nextInt()는 int형 표현 범위 (-2,147,483,648 ~ 2,147,483,647)의 모든 영역에서 랜덤 숫자
  • .nextInt( int bound )는 0 <= x < bound 범위의 정수 출력
  • nextBoolean()은 true 또는 false 랜덤 출력
  • nextDouble()은 double형 표현 범위( 0 ~ 1)의 실수 출력

 

댓글