본문

Random()

반응형

# Random()


난수를 얻는 방법을 생각하면 Math.random()이 떠오를 것이다. 그리고 Random클래스를 사용하는 방법도 있는데, 몇가지 추가적인 기능을 제외하고는 Math.random()과 다르지 않다. 그래서 대부분의 경우 Math.random()만 사용해도 난수를 얻는데 별 어려움이 없기 때문에 가능하면 Random보다는 Math.random()을 사용할 것을 권한다.


int[] fillRand(int[] arr, int from, int to)

: 배열 arr를 from과 to범위의 값들로 채워서 반환한다.

int[] fillRand(int[] arr, int[] data)

: 배열 arr를 배열 data에 있는 값들로 채워서 반환한다.


String[] fillDistinctRand(String[] arr, String[] data)

: 배열 arr를 배열 data에 있는 값들로 중복없이 채워서 반환한다.


int getRand(int from, int to)

: from과 to범위의 정수(int)값을 반환한다. from과 to 모두 범위에 포함된다.



데이터베이스에 넣을 테스트 데이터를 만드는 예제이다.

Source01) RandomEx01.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package randomEx;
 
public class RandomEx01 {
    final static int RECORD_NUM = 10// 생성할 레코드의 수를 정한다.
    final static String TABLE_NAME = "TEST TABLE";
    final static String[] CODE1 = { "010""011""017""018""019" };
    final static String[] CODE2 = { "남자""여자" };
    final static String[] CODE3 = { "10대""20대""30대""40대""50대" };
 
    public static void main(String[] args) {
        for (int i = 0; i < RECORD_NUM; i++) {
            System.out.println("INSERT INTO " + TABLE_NAME
                    + " VALUE ("
                    + " '" + getRandArr(CODE1) + "'"
                    + ", '" + getRandArr(CODE2) + "'"
                    + ", '" + getRandArr(CODE3) + "'"
                    + ", '" + getRand(100,200)    // 100~200 사이의 값을 얻는다.
                    + "); ");
        }
    }
 
    private static String getRandArr(String[] arr) {
        return arr[getRand(arr.length - 1)]; // 배열에 저장된 값 중 하나를 반환한다.
    }
 
    private static int getRand(int n) {
        return getRand(0, n);
    }
 
    private static int getRand(int from, int to) {
        return (int) (Math.random() * (Math.abs(to - from) + 1)) + Math.min(from, to);
    }
}
cs

Result)

1
2
3
4
5
6
7
8
9
10
INSERT INTO TEST TABLE VALUE ( '017''여자''30대''148); 
INSERT INTO TEST TABLE VALUE ( '010', '남자', '40대', '117); 
INSERT INTO TEST TABLE VALUE ( '017''여자''30대''124); 
INSERT INTO TEST TABLE VALUE ( '010', '여자', '40대', '146); 
INSERT INTO TEST TABLE VALUE ( '018''남자''30대''126); 
INSERT INTO TEST TABLE VALUE ( '017', '남자', '30대', '172); 
INSERT INTO TEST TABLE VALUE ( '017''여자''20대''170); 
INSERT INTO TEST TABLE VALUE ( '018', '여자', '40대', '130); 
INSERT INTO TEST TABLE VALUE ( '019''여자''10대''111); 
INSERT INTO TEST TABLE VALUE ( '010', '남자', '10대', '176); 
cs

지금까지는 연속적인 범위 내에서 값을 얻어왔지만, 때로는 이 예제와 같이 불연속적인 범위에 있는 값을 임의로 얻어와야 하는 경우도 있다.
이런 경우 불연속적인 값을 배열에 저장한 후, 배열에 index를 임의로 얻어서 배열에 저장된 값을 읽어오도록 하면 된다.


출처 및 참고자료 : JAVA의정석(남궁성 저)


반응형

공유

댓글