在数组中放入唯一的随机数

时间:2015-10-21 10:45:47

标签: java arrays random

我想尝试将一个独特的随机数从混洗列表中放入数组但仍然失败。

即时使用此answer几乎没有修改。

这是我的方法

ArrayList<Integer> list = new ArrayList<>();
    for(int i=0;i<10;i++) {
        list.add(i);}
    Collections.shuffle(list);
    for(int x=0;x<3;x++){
        RNGee=RNG.nextInt(9);
        RN[x]=list.get(RNGee);
        if(RN[x]==QNum){
            x=0;
        }
    }

当我打印出RN阵列时,其中一些有机会获得相同的值。

我的代码有问题吗? 请向我解释一下。 谢谢。

2 个答案:

答案 0 :(得分:1)

最简单的方法就是使用list.get(0)list.get(1)list.get(2)。列表是混洗的,因此列表头部的三个元素将是随机的和不同的。

for(int x=0;x<3;x++){
    RN[x]=list.get(x);
    if(RN[x]==QNum) { //but this is very unclear
        x=0;
    }
}

您的代码的部分内容尚未解释,如果您选择的随机数等于QNum,则会将循环变量设置回0。它根本不清楚那里有什么,但我怀疑你需要事先从列表中删除QNum,以便它永远不会出现:

for(int i=0;i<10;i++) {
    if (i!=QNum) {
        list.add(i);
    }
}

答案 1 :(得分:0)

尽管你的解决方案正如chiastic-security所说的那样是不必要的,但你的错误是你的列表仍然包含10个元素而你正在随机挑选。

为了能够使用您的解决方案,您需要从列表中删除您选择的元素,并生成0-list.size-1范围内的随机数。

ArrayList<Integer> list = new ArrayList<>();
for(int i=0;i<10;i++) {
    list.add(i);}
Collections.shuffle(list);
for(int x=0;x<3;x++){
    RNGee=RNG.nextInt(list.size()); // You collection gets smaller after each itteration so be sure to not run into a OutOfBound
    RN[x]=list.get(RNGee);
    list.remove(RNGee); // Remove the duplicate to be sure that the element doesn´t get picked twice
    if(RN[x]==QNum){
        x=0;
    }
}

编辑:还要确保遵循java约定,它表示方法和变量应该以小写和类大写开头。这将使您的代码最终对我们和您自己更具可读性。