2010-06-19 71 views
-1

我有一個數字數組,其中包含20個元素。我爲黑莓應用程序隨機顯示數字,bt我想要dat所有生成的d數字應該是唯一的。它應該是隨機生成的,它具有唯一性,直到陣列中的所有元素都耗盡。我在這裏給出這段代碼,如果有人能幫助我,我會非常感激。如何從一個數組中隨機生成數字,每個數字都是唯一的

static int quesNum[] = new int[20]; 
static int quesCount = -1; 

private static void initialize(){ 

    Random rgen = new Random(); // Random number generator 

    //--- Initialize the array 
    for (int i=0; i<quesNum.length; i++) { 
     quesNum[i] = i; 
    } 

    //--- Shuffle by exchanging each element randomly 
    for (int i=0; i< quesNum.length; i++) { 
     int randomPosition = rgen.nextInt(quesNum.length); 

     int temp = quesNum[i]; 

     quesNum[i] = quesNum[randomPosition]; 

     quesNum[randomPosition] = temp; 

    } 
} 

/*Changed the code to get a unique random number 

*/ 
public static int getQuestionNumber() { 
    quesCount++; 
    if(quesCount < quesNum.length){ 
     return quesNum[quesCount]; 
    } 
    else{ 
     initialize(); 
     quesCount = -1; 
     return getQuestionNumber(); 
    } 
} 
+3

如果您避免了青少年的縮寫(例如「b」與「be」),我將非常感激。它使閱讀更難。謝謝。 – 2010-06-20 00:25:22

回答

2

你所描述的僅僅是shuffling陣列的完美應用。

-1

您可以使用ArrayList而不是Array並刪除每個生成的數字。

3

洗牌,然後再重複:

Collections.shuffle(listOfValues); 
for(Integer val : listOfValues) { 
    // give it to user 
} 

UPDATE

OP的某些措辭讓我覺得Collections.shuffle()不支持黑莓。然後建議將Collections.shuffle(List,Random)的代碼複製到應用程序中。

0
int len = 20; 
Integer[] arr = new Integer[len]; 
for(int i =0;i<len;i++){ 
    arr[i] = Integer.valueOf(i+1); 
} 
Collections.shuffle(Arrays.asList(arr)); 

現在數組被混洗,你可以迭代它。