2011-04-28 3 views
0


Java에서이 작업을 수행 할 수 있습니까? 주어진 범위에 예를 들면 다음과 같이 난수를 생성하고 싶습니다 : 1에서 70 사이 - 난수가 생성 될 때마다 생성 결과에서 제외되어야합니다.
그래서 [1,70]는 랜드 (56) = (현재 56 간주해서는 안 다음번)
는 [1,70]는 = 63생성 된 숫자의 난수 생성 및 제외

+0

질문에 중복 : ** (http://stackoverflow.com/questions/4040001/java-creating-random-numbers-with-no-duplicates) [자바 중복 불가능하여 난수를 생성하기] ** – lschin

답변

3

(56,63 지금까지 내 코드 생성으로부터 배제되어야 실행) 이것은 [1..70]이 포함 된 숫자 배열을 뒤섞어 한 번에 하나씩 처리하는 것과 같습니다. Google에서 '셔플 알고리즘'을 찾습니다. 여기

+1

또는 JDK와 함께 제공되는 셔플 알고리즘을 사용하는 것이 좋습니다. http://adload.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List) –

+0

네, 거기에 있었음을 잊었습니다. –

1

범위를 배열에 채우고 배열을 셔플 할 수 있습니다. 매우 큰 범위의 경우 이것은 비효율적 일 것입니다.

1

또 다른 간단한 방법으로, HashMaps를 사용하여 난수를 추적합니다. 그것은 일종의 빠르고 더러운입니다.

HashMap<Integer,Integer> hmRandomNum = new HashMap<Integer,Integer>(); 

Integer a = < generate random number> 

if(hmRandomNum.get(a) == null) 
{ 
    hmRandomNum.put(a,a); 
} 
else 
{ 
    // ignore this random number. this was already selected and present in the hashmap. 
} 

//Iterate depending on how many numbers you want.