2012-09-20 3 views
1

사용자가 4 개의 숫자 (1-6)를 선택한 Android 앱을 만들기 위해 작업을 설정 한 다음 임의로 생성 된 4 개의 숫자와 비교 한 다음 그 중 몇 개를 많이 표시하는지 알려줍니다. 숫자가 정확했다.Java/Android 바이어스 번호 생성기

제 문제는 임의의 숫자를 생성 할 때마다 마지막 숫자를 제외하고는 항상입니다. 만약 그들이

Random a1 = new Random(); 
    random1 = new ArrayList<Integer>(); 

    for (int index = 0; index < 6; index++) 
    { 
     random1.add(a1.nextInt(5)+ 1); 
    } 

    Random a2 = new Random(); 
    random2 = new ArrayList<Integer>(); 

    for (int index = 0; index < 6; index++) 
    { 
     random2.add(a2.nextInt(5)+ 1); 
    } 

이 내가 난수 생성에 사용하는 코드는, 각 번호는, 그것은 더욱 혼란하게 동일한 코드를 사용하는 모든 내가 이해할 수 같은이 같은 코드 때문에 그것이 그 라인을 따라 같은 번호 나 어떤 것을 생성하지만, 마지막 라인은 항상 다르다. 어떤 도움이 항상 감사 할 것이다.

답변

0

랜덤 인스턴스를 두 개 만들지 말고 단일 인스턴스를 대신 사용하십시오. 5 월이 될 수 있습니다. 종자가있는 Randoms는 가까운 출력을냅니다.

+0

기본 임의의 객체가 그 방법을 사용'이 (++ seedUniquifier + System.nanoTime());' –

+0

좋아, 내 대답은 내가 그 생각 –

+0

을 편집 할 수 있습니다, 그래서 내가 사용하는 모든 임의의 숫자를 변경 ' a1 ',하지만'[4,4,5,5] '의 출력이 이상합니까? – 8BitSensei

0

아래 코드가 적합한 지 확인하십시오. 코드는 http://www.javapractices.com/topic/TopicAction.do?Id=62에서 가져 왔습니다. 요구 사항에 따라 수정되었습니다.

public final class RandomRange { 

public static final void main(String... aArgs) { 

    int START = 1; 
    int END = 6; 
    Random random = new Random(); 
    List<Integer> first = new ArrayList<Integer>(); 
    List<Integer> second = new ArrayList<Integer>(); 
    for (int idx = 1; idx <= END; ++idx) { 
     first.add(showRandomInteger(START, END, random)); 
     second.add(showRandomInteger(START, END, random)); 
    } 
    System.out.println(first); 
    System.out.println(second); 
    first.retainAll(second);//Find common 
    System.out.println(first); 

} 

private static int showRandomInteger(int aStart, int aEnd, Random aRandom) { 
    if (aStart > aEnd) { 
     throw new IllegalArgumentException("Start cannot exceed End."); 
    } 
    // get the range, casting to long to avoid overflow problems 
    long range = (long) aEnd - (long) aStart + 1; 
    // compute a fraction of the range, 0 <= frac < range 
    long fraction = (long) (range * aRandom.nextDouble()); 
    int randomNumber = (int) (fraction + aStart); 
    return randomNumber; 
} 

}