2019. 10. 3. 01:31

[JAVA]랜덤 난수 만들기

자바에서 랜덤 난수로 1~n까지의 무작위 값 얻기


기본적으로 자바에서는 0.0에서 0.999999999 즉 1에 가까운 무한소수까지 중에 하나를 랜덤으로 추출해주는

random() 함수를 제공한다

예를 들면 Math.random() \* 5 를 하면 0.0에서 4.999999...의 값을 리턴 받을 수 있다.

여기서 우리는 실수형 double값으로 리턴받는다는 사실을 알 수 있고 int형으로 형변환을 한다면 소수점 이하 자리수는 떨어져 나가고 0~4까지의 랜덤한 값을 리턴받을 수 있다는 점 또한 알 수 있다.

하지만 우리가 원하는 것은 양수, 즉 1이상의 숫자부터라고 한다면?

랜덤해서 나온 값은 1을 넘지 않으므로 그냥 간단하게 뒤에 +1만 붙여주면 된다.

그렇게하면 위에서 예를들은 Math.random() \* 5는 0에서 4.999의 값이므로 형변환을 해서 소수점 이하는 버렸다고 치면 0은 1이 더해져서 1 그러니까 최소값으로 1을 최대값인 4.9999는 1이 더해져서 5(0.99999...는 버려지므로)가 되므로 우리가 원하는 양수의 1~5의 값을 얻게되었다.

public class RandomTest01 {

    public static void main(String[] args) {
        int num = 0;

        num = (int)(Math.random()*5)+1;
        System.out.println(num);

    }

그럼 1부터가 아니라 특정한 범위를 구하고 싶다면?


1부터 n까지 난수를 구하는 법은 알았다. 하지만 1이 아닌 특정한 범위의 숫자를 랜덤 출력하고 싶다면?

최소값 min과 최대값 max라는 변수가 있다고할 때

범위만큼의 난수를 만들어주고 최소값을 더해주면 됩니다. 이해하기 쉽게 코드로 보자.

public class RandomTest02 {

    public static void main(String[] args) {
        int min = 2; //최솟값
        int max = 5; //최댓값

        int range = (int)(Math.random() * (max - min + 1)) + min;
        System.out.println(range);
    }
}

출력 값은 2~5사이의 난수가 나오게 된다.

+1을 하지 않으면 최대값의 범위까지 나오기 않게 된다.

다른 방법으로 랜덤 만들기


import java.util.Random;

public class Randomtest3 {

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

        int num = (int)(Math.random()*10)+1;
        int num2 = random.nextInt(10)+1;

        System.out.println("Math.random()으로 만든 숫자:"+num);
        System.out.println("random.netInt로 만든 숫자 :"+num2);
    }

위 방법은 자바 유틸에 있는 랜덤 함수 클래스를 이용한 랜덤 난수 만들기이다.
주의해야할 점은 스태틱에 올라와있는 일반적인 기본 함수가 아니기 때문에 java.util.Random을 import시켜야하고 Random random = new Random(); 이런 식으로 인스턴스화 시켜야한다.

그러면 비교적 쉽게 0~매게변수 안의 값까지의 랜덤 난수를 구할 수 있다. 역시 양수의 값을 얻고 싶다면 +1을 할 것.