[JAVA] Random 클래스에 대해서

2019. 9. 30. 14:43 JAVA/Java

Random 클래스에 대해서



소프트웨어를 개발할 때 난수(random number)에 대한 필요성은 빈번히 발생한다.


특히 게임은 주사위를 던지거나 카드를 섞을 때 난수를 사용한다.


java.util 패키지의 일부인 Random 클래스는 의사난수 발생기(Pseudorandom number generator)이다.


Random 클래스는 일정 범위의 값들에서 한 개의 수를 임의로 선택한다.



* Random 클래스의 method


 Random()

 구성자 : 새로운 랜덤 발생기를 생성한다.

 float nextFloat()

 0.0(값 포함)과 1.0(값 포함하지 않음) 사이의 난수를 반환한다.

 int nextInt()

 가능한 모든 int 값(양수와 음수)에 걸친 범위의 난수를 반환한다.

 int nextInt(int num)

 0 부터 num-1까지 범위에 있는 난수를 반환한다.




Random 클래스는 new Random() 을 사용하여 객체를 생성한다.


int 형의 정수 랜덤값을 추출하기 위해서는 생성한 Random 객체에 nextInt() 메소드를 호출하면 된다.


nextInt 호출시에 파라미터를 넣어주지 않으면 int의 전체범위에서 랜덤값을 추출한다.

(int 전체 범위 : -2,147,483,648 ~2,147,483,647 )


nextInt() 에 숫자를 넣어주면, 0~num-1 까지의 범위에서 랜덤값을 추출한다.

ex> nextInt(10) : 0~9


여기서 시작 범위를 변경하고 싶다면 그 수만큼 더해주면 된다.


2~11 범위에서 값을 추출하고 싶다면, nextInt(10)+2  를 하면 된다.


밑에 예제를 살펴보면 이해가 될 것이다.




import java.util.Random;

public class RandomTest{
   
    public static void main(String[] args){
       
        // Random() 객체 생성
        Random generator = new Random();       
       
        int num1;
        float num2;
       
        // int 값의 범위에서 정수 랜덤값을 추출한다.
        // (-2,147,483,648 ~2,147,483,647)
        num1= generator.nextInt();        
        System.out.println("A random integer: "+num1)
       
        // 0~9 사이의 정수 랜덤값을 추출한다.
        num1= generator.nextInt(10);           
        System.out.println("Form 0 to 9: " + num1);
       
        // 1~10 사이의 정수랜덤값을 추출한다.
        num1= generator.nextInt(10) + 1;       
        System.out.println("Form 1 to 10 : " + num1);
       
        // 20~34 사이의 정수 랜덤값을 추출한다.
        num1= generator.nextInt(15) + 20;      
        System.out.println("Form 20 to 34: " + num1);
       
        // -10 ~ 9 사이의 정수 랜덤값을 추출한다.
        num1= generator.nextInt(20) - 10;      
        System.out.println("Form -10 to 9: " + num1);
       
        // 0.0(포함) ~ 1.0(포함안함) 사이의 난수를 추출한다.
        num2= generator.nextFloat();           
        System.out.println("A random float(between 0-1): " + num2);
       
        // 0.0 ~ 5.9999999 사이의 난수를 추출한다.
        // int로 형 변환(0~5) 후 1을 더한다.
        // 1~6 사이의 난수를 출력한다.
        num2 = generator.nextFloat()*6
        num1 = (int)num2 + 1;         
        System.out.println("From 1 to 6: " + num1)
            
    }
}



* 결과 화면



RandomTest.zip


출처: https://hyeonstorage.tistory.com/160?category=557602 [개발이 하고 싶어요]