2012-09-20 58 views
1

我已經設置了一個任務來創建一個Android應用程序,用戶在其中選擇四個數字(1-6),然後將其與四個隨機生成的數字進行比較,然後告訴他們有多少個數字是正確的。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

嘗試不創建兩個隨機實例,而是重複使用單個實例。可能是兩個關閉種子的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; 
} 

}