Java

[Java]난수 생성 방법

DevStory 2022. 8. 31.

난수 생성 방법

이번 포스팅은 Java에서 특정 범위의 난수를 생성하는 몇 가지 방법을 소개합니다.


방법 1. Random 클래스 사용 방법

첫 번째 방법으로 가장 잘 알려져 있는 Random 클래스를 사용하여 특정 범위의 난수를 생성할 수 있습니다.

 

먼저, Random 클래스의 객체를 생성합니다.

 

int 타입의 랜덤 값을 생성하기 위해 다음 메서드를 사용합니다.

public int nextInt();
public int nextInt(int bound);

nextInt() 메서드

- int 타입의 범위에 해당하는 랜덤 값을 생성합니다.

- 범위: -2,147,483,648 ~ 2,147,483,647

 

nextInt(int bound) 메서드

- 0 ~ (bound - 1) 범위에 해당하는 랜덤 값을 생성합니다.

 

float, double 타입의 랜덤 값을 생성하기 위해 다음 메서드를 사용합니다. 0 ~ 1.0 사이의 값을 생성합니다.

public float nextFloat();
public double nextDouble();

 

boolean 타입의 랜덤 값을 생성하기 위해 다음 메서드를 사용합니다.

public boolean nextBoolean();

 

다음 예제는 Random 클래스를 사용하여 랜덤 값을 생성합니다.

public static void main(String args[]) {
  Random rand = new Random();

  System.out.println("int 타입인 랜덤 값: " + rand.nextInt());
  System.out.println("int 타입인 0 ~ 20 범위의 값 : " + rand.nextInt(21));
  System.out.println("float 타입인 랜덤 값: " + rand.nextFloat());
  System.out.println("double 타입인 랜덤 값: " + rand.nextDouble());
  System.out.println("boolean 타입의 랜덤 값: " + rand.nextBoolean());
}

[첫 번째 실행 결과]

int 타입인 랜덤 값: 126636943
int 타입인 0 ~ 20 범위의 값 : 16
float 타입인 랜덤 값: 0.80442506
double 타입인 랜덤 값: 0.9826649452351304
boolean 타입의 랜덤 값: true

[두 번째 실행 결과]

int 타입인 랜덤 값: -420598246
int 타입인 0 ~ 20 범위의 값 : 13
float 타입인 랜덤 값: 0.043560445
double 타입인 랜덤 값: 0.35768994280458843
boolean 타입의 랜덤 값: false

방법 2. Math 클래스 사용 방법

Math 클래스의 random() 메서드를 사용하여 랜덤 값을 생성할 수 있습니다.

public static double random();

random() 메서드는 내부적으로 Random 클래스의 nextDouble() 메서드를 호출합니다.

 

특정 범위의 정수 타입인 랜덤 값을 생성하려면, 다음 계산식을 사용합니다.

Math.floor(Math.random()*(maxValue - minValue + 1) + minValue);

 

다음 예제는 Math 클래스의 random() 메서드를 사용하여 특정 범위의 정수 타입인 랜덤 값을 생성합니다.

public static void main(String args[]) {
  System.out.println("Math.random(): " + Math.random());
  System.out.println("100 ~ 200 범위의 랜덤 값 : " + Math.floor(Math.random()*(101) + 100));
  System.out.println("1000 ~ 2000 범위의 랜덤 값: " + Math.floor(Math.random()*(1001) + 1000));
}

[첫 번째 실행 결과]

Math.random(): 0.9179218421239489
100 ~ 200 범위의 랜덤 값 : 162.0
1000 ~ 2000 범위의 랜덤 값: 1530.0

[두 번째 실행 결과]

Math.random(): 0.9893817160894979
100 ~ 200 범위의 랜덤 값 : 108.0
1000 ~ 2000 범위의 랜덤 값: 1719.0

방법 3. 여러 개의 랜덤 값 생성

Java 버전이 1.8 이상인 경우 Random 클래스에서 제공하는 ints() 메서드를 사용하여 int 타입의 범위에 해당하는 여러 개의 랜덤 값을 생성할 수 있습니다.

public IntStream ints();

- 매개변수가 없는 경우 랜덤 값을 무한으로 생성합니다.

 

public IntStream ints(long streamSize);

- 매개변수로 전달된 streamSize만큼 랜덤 값을 생성합니다.

 

public IntStream ints(int randomNumberOrigin, int randomNumberBound);

- randomNumberOrigin부터 (randomNumberBound - 1) 범위의 랜덤 값을 생성합니다.

- 랜덤 값을 무한으로 생성합니다.

 

public IntStream ints(
  long streamSize, 
  int randomNumberOrigin,
  int randomNumberBound)

- randomNumberOrigin부터 (randomNumberBound - 1) 범위의 랜덤 값을 생성합니다.

- 매개변수로 전달된 streamSize만큼 랜덤 값을 생성합니다.

 

다음 예제는 ints() 메서드를 사용하여 1 ~ 10 사이의 랜덤 값 5개를 생성합니다.

public static void main(String args[]) {
  new Random().ints(5, 1, 11).forEach(System.out::println);
}

[실행 결과]

6
8
9
8
6
반응형

댓글