본문 바로가기
android

random 한 수 그것도 중복이 없게 뽑아 볼 까 ?

by Billcoreatech Billcoreatech 2021. 7. 21.
반응형

앱을 하나 만들고 있는 중인데, 

하다 보니  중복이 없는 random 값을 추출해야 하는 고민에 빠짐... 

와이프님의 백신 예약도 해야 하는 날인데,  예약 서버는 버벅 거리고... 나의 머리도 버벅 거리고...

우째 우쨰 드뎌 완성!!!

아래 소스는 간단히 설명 하자면... 사용하기 위해서는 우선 

import java.util.Random

이 필요하다...  그리고 아래 나열된 부분은 함수 부분만 적었으니, 어딘가에서 호출하는 부분도 있어야 할 것 같다.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        ...
        int[] dispOrder = getRandomCount(iTyCnt);
        ...
        
    }

뭐 이런식으로 다가...  getRandomCount 로 넘어가는 파라미터인 count 는 추출해야 하는 숫자의 제일 큰 값 이라고 

보면 된다.  물론 시작하는 숫자는 0 이고. 그래서 0 ~ count 범위 내에서 random 한 숫자를 만들어서 

결과로 돌려 주는 것이다.

    /**
     * 중복이 없는 랜덤한 숫자 만들기
     * @param count
     * @return
     */
    public int[] getRandomCount(int count) {
        int[] nResult = new int[count];

        for(int i=0; i < count; i++) {
            if (i == 0) {
                nResult[i] = getRandomValue(count) ;
            } else {
                nResult[i] = getRandom(i, count, nResult); // 배열 사용을 위해서 -1 했음.
            }
            Log.e(TAG, "------[" + i + "]=" + nResult[i]) ;
        }

        return nResult ;
    }

    /**
     * 재귀호출을 통해서 중복이 없는 숫자를 만든다.
     * @param ii : 선택된 위치
     * @param count : 제일 큰 값의 범위
     * @param nResult : 결과를 저장하는 배열
     * @return
     */
    private int getRandom(int ii, int count, int[] nResult) {

        int randomValue = getRandomValue(count) ;
        for(int i = 0 ; i < ii ; i++) {
            //Log.e(TAG, "nnn [" + i + "]=" + "<" + ii + ">" + nResult[i] + "==" + randomValue) ;
            if (randomValue == nResult[i]) {
                randomValue = getRandom(ii, count, nResult) ;
                break;
            }
        }
        return randomValue ;
    }

    /**
     * 랜덤하게 숫자를 하나 만듬
     * @param count : 제일 큰 값의 범위
     * @return
     */
    private int getRandomValue(int count) {
        Random random = new Random();
        return random.nextInt(count);
    }

 

궁금한 부분이 있다면  아래 댓글로 달아 두시면 답을 적어 드립니다.

 

반응형

댓글0