2020-12-18
자바를 처음 공부하다 보면, 누구나 한 번쯤 주사위 확률 예제를 봤을 것이다. 이 경우 Math 클래스의 random();이라는 메서드를 사용해서 0 ~ 1의 난수를 얻어 이후 정수를 더해 Integer값을 얻어 냈을 것이다. 그렇다면 double 난수가 아닌 int / long /float와 같은 난수뿐 아니라, boolean 난수를 얻으려면 어떻게 해야 할까?
바로 Random클래스를 사용하면 이와 같은 문제를 쉽게 해결할 수 있다. 아래의 예제를 살펴보자.
package tRandom;
import java.util.Random;
public class main {
public static void main(String[] args) {
Random ran = new Random();
//랜덤 클래스 선언
int [] arrI = new int [5];
long [] arrL = new long[5];
float[] arrF = new float[5];
boolean [] arrB = new boolean [5];
//각 타입별 5개의 값이 들어갈 배열 선언
for(int i = 0; i < 5; i++) {
arrI[i] = ran.nextInt();
arrL[i] = ran.nextLong();
arrF[i] = ran.nextFloat();
arrB[i] = ran.nextBoolean();
}
for(int i = 0; i < 5; i++) {
System.out.println(arrI[i] + " / " + arrL[i] + " / "
+ arrF[i] + " / " + arrB[i] + " / ");
}
}
}
int / long / float / boolean 모두 자신의 타입별 값을 받을 수 있는 배열을 선언해주었으며, 이후 for문을 통해 난수를 생성할 수 있게 하였다. 출력 결과는 아래와 같으며, 각 타입에 맞는 난수를 출력하는 것을 확인할 수 있다.
그렇다면 Math.random() 메서드처럼 주사위 예제를 만들려면 어떻게 해야 할까? 코드는 아래와 같다.
package tRandom;
import java.util.Random;
public class main {
public static void main(String[] args) {
Random ran = new Random();
//랜덤 클래스 선언
int [] arrI = new int [6];
for(int i = 0; i < 6; i++) {
arrI[i] = ran.nextInt(6) + 1;
}
for(int i = 0; i < 5; i++) {
System.out.println(arrI[i]);
}
}
}
간단하게 Int 타입의 배열을 선언해 주고 이후 매개 값으로 6을 넣고 + 1을 해주면 1 ~ 6 까지의 랜덤한 수가 출력된다.
그렇다면 왜 + 1 을 해주는 걸까? 이유는 단순하다. nextInt 메서드에 매개 값이 주어지면, 0부터 시작하기 때문에 매개 값을 6을 줄 경우 0 ~ 5의 범위로 난수가 생성된다. 때문에 + 1을 해주어 1 ~ 6의 난수가 출력될 수 있도록 해주는 것이다.