Java/Java 문법

Java에서 난수 만들기

열심히 해 2024. 9. 13. 21:03

숫자 야구 게임을 만들 때 정답 숫자를 만들기 위해

 

자바에서 임의의 수를 만드는 방법을 찾아보다가 작성하게 되었다.

 

여러 방법이 있으니 상황에 맞춰 판단하여 적절한 방식을 고르면 된다.

 

 

1.  java.util.Random 클래스

 

Random 클래스를 사용하는 것이기 때문에 객체를 만들어야한다.

 

 

- 임의의 정수 생성

Random random = new Random();
int randomInt = random.nextInt();

 


- 자릿수 지정

Random randomWithSeed = new Random(5);

다섯 자리, 즉 임의의 만의 자리의 수(10,000~99,999)가 만들어진다.

 

 

-  0부터 100(제외)까지의 임의의 정수 생성, 여기서는 매개 변수에 값을 주어 범위를 한정했다.

Random random = new Random();
int randomInt = random.nextInt(100); // 0(포함)부터 100(제외)까지의 임의의 정수

 

 

 

-임의의 정수 여기서는 매개 변수에 값을 주어 범위를 한정했다. 아래와 같은 방식으로 응용할 수 있다.

int randomInt = random.nextInt(100) + 10; // 10(포함)부터 100(제외)까지의 임의의 정수
int randomInt = random.nextInt(최댓값) + (최솟값) // 최솟값(포함)부터 최댓값(제외)까지의 임의의 정수

 

 

 

* 동일한 시드값을 갖는 인스턴스가 생성한 난수는 일정 패턴을 갖는다

 

컴퓨터는 우리가 볼 때 임의의 값인 것처럼 보이게 특정한 방법으로 난수 생성을 흉내낸다. 이처럼 특정한 알고리즘으로 생성된 값을 유사 난수(pseudo-random)라고 한다. 참고로 Random 클래스는 시드값을 설정하지 않은 경우 시스템의 현재 시간을 활용한다. 따라서 위 사진과 같은 현상이 발생하게 된다.

 

 

2. Math.random 메서드

 

Math 클래스의 random 메서드는 static 메서드이기 때문에 위와는 다르게 인스턴스를 만들지 않아도 된다. 

 

 

- 0.0 ~ 1.0(제외)까지의 임의의 실수 

double randomDouble = Math.random(); // 0.0 (포함)부터 1.0 (제외)까지의 임의의 실수
System.out.println("임의의 실수: " + randomDouble);

 

 

- 곱셈 연산자를 통해 범위 늘리기

int randomInt = (int) (Math.random() * 100); // 0 (포함)부터 100 (제외)까지의 임의의 정수
System.out.println("0부터 99까지의 임의의 정수: " + randomInt);

 

 

- 덧셈 연산자를 통해 최솟값 지정하기

int randomInt = (int) (Math.random() * 100) + 10 ; // 10.0(포함)부터 100 (제외)까지의 임의의 정수
System.out.println("0부터 99까지의 임의의 정수: " + randomInt);

 

 

 

3. ThreadLocalRandom 클래스

 

- 임의의 정수  

int randomInt = ThreadLocalRandom.current().nextInt();
System.out.println("임의의 정수: " + randomInt);

 

current 메서드를 사용해 객체 생성을 할 필요가 없다. 객체를 생성하지 않기에 멀티 스레드 환경에서 더 효율적이다.

 

 

- 0부터 100(제외)까지 임의의 정수

int randomInt = ThreadLocalRandom.current().nextInt(100); // 0 (포함)부터 100 (제외)까지의 임의의 정수
System.out.println("0부터 99까지의 임의의 정수: " + randomInt);

 

 

 

4. 의존성 추가 :  Apache Commons Math 프로젝트의 RandomDataGenerator 클래스, Apache Commons Lang3 프로젝트의  RandomUtils 클래스

 

 

 

 

참고 : https://madplay.github.io/post/java-random

'Java > Java 문법' 카테고리의 다른 글

for문을 통해 Map을 순회하기  (0) 2024.09.19
Set  (0) 2024.09.16
Java 문법 10 (제네릭)  (0) 2024.09.10
Java 문법 9 (오류 및 예외)  (0) 2024.09.09
Java 문법 8 (인터페이스)  (0) 2024.09.06