2016-01-28 49 views
1

我一直在敲我的腦袋兩天,現在試圖確保隨機生成器方法不會生成重複。這隻需要處理循環而不導入任何庫。我已經到了這個解決方案,這段代碼是否會在長期運行中產生重複?如果是,請幫助。生成一個沒有重複的隨機數組

int[] vargu1 = new int[5]; 

for (int i = 0; i < vargu1.length; i++) { 
    int numriSekret = (int) (Math.random() * 10) + 1; 
    vargu1[i] = numriSekret; 
} 

System.out.println(vargu1[i]); 
System.out.println(); 

for (int i = 0; i < vargu1.length; i++) { 
    for (int j = 0; j < i; j++) { 
     if (vargu1[i] == vargu1[j]) { 
      vargu1[i]++; 
     } 
     System.out.println(vargu1[i]); 
    } 
} 
+1

如果它不能夠產生重複,它不再是一個「隨機數生成器」,那麼究竟是你想什麼去做? – Stultuske

+0

@Stultuske我想確保隨機方法不會給我兩次相同的數字。 –

+0

如果你認爲你需要「沒有重複的隨機數」,那麼你不明白這個問題。你究竟在努力完成什麼? –

回答

1

據我瞭解你在做什麼,更好的辦法將/可能是:

List<Integer> myList = new ArrayList<Integer>(); 
for (int i = 0; i < expectedNumberOfUniques; i++){ 
    Integer a = generateRandom(); 
    while (myList.contains(a)){ 
    a = generateRandom(); 
    } 
    myList.add(a); 
} 

一些言論,但:在myList中的元素越多,效率較低可能是效率較低。

但是:只要您將其限制爲「不允許重複」,我們就不再談論「隨機」數字了。

+1

我知道它不會被稱爲隨機,如果我限制它,但我必須確保不生成相同的數字兩次。我必須在不導入任何庫的情況下執行此操作。 –

2

既然你說沒有任何庫,你可以重新實現數組的Collections.shuffle(...)方法。

int [] randoms = new int[5]; 

// creating an array containing the numbers 1-10 
int [] shuffleArray = new int[10]; 
for (int i = 1; i <= 10; i++) { 
    shuffleArray[i-1] = i; 
} 

// shuffling that array 
Random random = new Random(); 
for (int i = 0; i < 10; i++) { 
    int j = random.nextInt(10); 
    int tmp = shuffleArray[i]; 
    shuffleArray[i] = shuffleArray[j]; 
    shuffleArray[j] = tmp; 
} 

// assigning the first 5 values to the random array 
for (int i = 0; i < randoms.length; i++) { 
    randoms[i] = shuffleArray[i]; 
} 

雖然我此言是Random需要進口過(需要太庫)