2012-12-12 2 views
0

내 Android 앱에서 지정된 범위에서 두 개의 임의의 정수를 선택해야합니다. 아래의 코드는 작동하지만, 실제로는 무작위 정수를 선택하지는 않습니다. int를 뒤섞습니다. 그리고 저에게 버그가있는 점은 코드의 randomNum2= (int)it.next(); 비트 때문에 max 값을 1보다 작게 지정해야한다는 것입니다. 올바른 번호 (현재 127)를 최대 값으로 입력하면 다음 반복으로 128을 찾고 있기 때문에 오류 java.util.NoSuchElementException가 표시됩니다. 전에 내가 사용했다 rand = new Random(); randomNum1 = rand.nextInt(max - min + 1) + min; randomNum2 = rand.nextInt(max - min + 1) + min;하지만 두 개의 무작위 ints가 끝날 수도 있습니다 문제가 있으며, 나는 그들이 고유해야합니다. 그래서 누구나 최소/최대 정수 범위에서 두 개의 난수를 얻는 더 좋은 방법을 제안 할 수 있습니까?Android가 지정된 범위에서 2 임의의 정수를 선택하십시오.

int min = 1; 
int max = 126; 
int randomNum1; 
int randomNum2; 
List<Integer> choicesL; 

public void randomTwo() { 
    choicesL = new LinkedList<Integer>(); 
    for (int i = min; i <= max; i++) { 
     choicesL.add(i); 
    } 
    Collections.shuffle(choicesL); 
    Iterator<Integer> it = choicesL.iterator(); 
    while (it.hasNext()) 
    { 
     randomNum1= (int)it.next(); 
     randomNum2= (int)it.next(); 

    } 

} 

답변

1

당신은 기존의 코드를 사용할 수 있지만 루프 동안 함께 작동하는 일반적인 대답이다.

rand = new Random(); 
randomNum1 = rand.nextInt(max - min + 1) + min; 
randomNum2 = rand.nextInt(max - min + 1) + min; 

while (randomNum2==randomNum1){ 
    randomNum2 = rand.nextInt(max - min + 1) + min; 
} 

편집

은 임의의 번호를 확인하는 방법에는 여러 가지가 있습니다. 당신이 이것을 안다면 나는 모르지만이 아래에는 많은 통계적 연구가 있습니다. 난수를 계산하는 빠른 방법이 필요하면 좋습니다. 그러나 큰 시간이 지난 후에 사용자는 임의의 숫자가 어떻게 분포되어 있는지 알 수 있습니다.

http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform

http://en.wikipedia.org/wiki/Ziggurat_algorithm

을 물론 나는 그물

+0

이 감사에 더 많은 이론이 있다는 것을 supose : 당신은 당신의 코드를 개선하려면 어쩌면 당신은 확인하실 수 있습니다! while 문을 직접 추가해야한다고 생각했습니다. 너무 쉽습니다! – kirktoon1882

0

당신이 훨씬 더 효율적해야 Set를 사용하고 세트 (범위의 크기 비교) 요소의 소수를 들어 크기 2.
의 때까지 삽입 요소를 유지할 수 있습니다 : 여기 내 코드는 다음 목록을 채우고 채 웁니다.

int max = 126; 
int min = 1; 
int size = 2; 
Set<Integer> set = new HashSet<Integer>(); 
Random r = new Random(); 
while (set.size() != size) { 
    set.add(r.nextInt(max - min + 1) + min); 
} 
System.out.println(set); 

참고 :이 (물론 size <= max - min 가정) 필요한 모든 크기

관련 문제