ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA]랜덤 난수 만들기
    Programming/java 2019. 10. 3. 01:31

    자바에서 랜덤 난수로 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을 할 것.

    댓글

Copyright 2023. 은유 All rights reserved.