본문 바로가기

카테고리 없음

Random 클래스 - 난수발생 : Random() 와 Random(long seed) 생성자 관련 예제. [출처] [Java] Random 클래스 - 난수발생 : Random() 와 Random(long seed) 생성자 관련 예제. |작성자 자바킹

반응형

 

 Random클래스

임의의 값(난수) 을 발생시켜주는 클래스



         -생성자

         * Random() : 현재의 시간을 초기값으로 하는 난수발생

         * Random(long seed) : seed값을 초기값으로하는 난수발생

 

-주요메서드

int nextInt() : 임의의 정수값을 반환

int nextInt(int n) : 0~n까지 범위 내에 있는 임의의 정수 값을 반환

double nextDouble() : 0.0~1.0사이의 임의의 실수값을 반환

 

 

[참고]

Math.random() : java.lang.Math 클래스의 random() 메서드 , 0.0~ 1.0 사이의 임의의 더블값을  반환하는 메소드

 

 [코드] Random() 와 Random(long seed) 생성자 관련 예제. 

 

import java.util.Random;

public class ddddddd {

    public static void main(String[] args) {
        
        /*
         * Random클래스
         * -생성자
         * Random():현재의 시간을 초기값으로 하는 난수발생
         * Random(long seed) : seed값을 초기값으로하는 난수발생
         */

        
        System.out.println("== Random 함수 생성시 seed값을 100으로 줬을경우");
        Random random = new Random(100);
        for (int i=0;i<10;i++){
            System.out.print(random.nextInt(3)+" ");
        }
        System.out.println();
        System.out.println("== Random 함수 생성시 seed값을 100으로 줬을경우");
        Random random2 = new Random(100);
        for (int i=0;i<10;i++){
            System.out.print(random2.nextInt(3)+" ");
        }
        System.out.println();
        System.out.println("== Random 함수 생성시 seed값을 50으로 줬을경우");
        Random random3 = new Random(50)//seed값을 초기값으로 하는 난수발생
        for (int i=0;i<10;i++){
            System.out.print(random3.nextInt(3)+" ");
        }
        System.out.println();
        System.out.println("== Random 함수 생성시 기본생성자로 생성했을경우");
        Random random4 = new Random();
        for (int i=0;i<10;i++){
            System.out.print(random4.nextInt(3)+" ");
        }
        System.out.println();
        System.out.println("== Random 함수 생성시 기본생성자로 생성했을경우");
        Random random5 = new Random()//현재의 시간을 초기값으로 하는 난수발생.
        for (int i=0;i<10;i++){
            System.out.print(random5.nextInt(3)+" ");
        }

    }

}
 

 



결과보기) 


== Random 함수 생성시 seed값을 100으로 줬을경우

1 1 1 0 1 0 2 2 1 1 

== Random 함수 생성시 seed값을 100으로 줬을경우

1 1 1 0 1 0 2 2 1 1 

== Random 함수 생성시 seed값을 50으로 줬을경우

1 0 2 1 1 1 1 0 0 1 

== Random 함수 생성시 기본생성자로 생성했을경우

0 1 1 0 2 2 1 1 0 0 

== Random 함수 생성시 기본생성자로 생성했을경우

1 2 1 2 2 2 1 1 1 1 



=> Random 객체 생성시 똑같은 seed값을 전달하면 같은 난수가 발생하는 결과를 볼수있다 

=> 하지만 인자가 없는 생성자로 객체를 생성했을경우 현재의 시간을 초기값으로 하여 난수를 발생하므로 서로 다른 난수가 발생하는것을 볼수있다.

 




 [코드] Random() : 난수발생 예제.  

import java.util.*;
//import java.lang.*;
 public class RandomTest {
  public static void main(String args[]) {
    Random rn = new Random();

    //시드를 설정하지 않을경우
    //현재프로그램을 실행해보면 매번 다른 값이 아닌 같은 난수가 표시됨을 알 수 있음-->가짜난수!! 
    
    //시드를 설정
    rn.setSeed(System.currentTimeMillis());
    for(int i = 0 ; i < 10 ; i++) {
      double a = rn.nextDouble()// 0.0~1.0사이의 임의의 실수값을 반환
      System.out.print("실수형 난수 : " + a);
      int b = rn.nextInt(50)//0~49의 임의의 정수가 반환
      
      System.out.println("  Int형 난수 : " + b);}
      }
} 
 

 

시드를 설정하지 않았을경우 

rn.setSeed(System.currentTimeMillis()); 코드를 주석 처리했을경우 

 

 

시드를 설정한경우.

rn.setSeed(System.currentTimeMillis()); 코드를 포함하여 실행한 결과

시드를 설정하면 난수를 발생시 얻어오는 값이 (범위보다 적은 난수를 발생했을경우) 중복이 되지 않은것을 확인할수있다.

 

 


반응형