如何随机生成数组中的数字,每个数字都是唯一的

时间:2010-06-19 16:02:54

标签: java

我有一个数字数组,其中包含20个元素。我正在为黑莓应用程序随机显示数字,但是我想要数据生成的所有数字应该是唯一的。它应该随机生成,但它有b唯一直到所有数组中的元素已经用尽了。我在这里给出了一段代码,如果有人可以帮助我,我将非常感激。

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();
    }
}

4 个答案:

答案 0 :(得分:3)

先洗牌,然后迭代:

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

<强>更新

OP的一些措辞让我觉得Blackberry不支持Collections.shuffle()。然后建议将Collections.shuffle(List,Random)的代码复制到应用程序中。

答案 1 :(得分:2)

您所描述的只是shuffling阵列的完美应用。

答案 2 :(得分: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));

现在数组被洗牌,你可以迭代它。

答案 3 :(得分:-1)

您可以使用ArrayList而不是Array,并删除每个生成的数字。