如何为不重复的阵列生成随机数? (JAVA)

时间:2015-12-05 17:47:27

标签: java arrays random

所以我正在尝试制作体育比赛日程表生成器。这从包含字段名称的数组中随机选择。如何使它不会两次选择相同的字段?

    Random rand = new Random();
    int index, loc;
    index = rand.nextInt();
    loc = rand.nextInt(y);
    System.out.print(fields[loc]);

3 个答案:

答案 0 :(得分:1)

创建一个与布尔类型的fields数组大小相同的单独数组,然后选择一个位置时:

loc = rand.nextInt(y);
alreadySelected[loc] = true;
if(!alreadySelected[loc]) {
    System.out.print(fields[loc]);
}

如果你已经去过那个地方,它将不会再打印出来。

答案 1 :(得分:0)

public static void main(String[] args) {
    ArrayList<> list = new ArrayList<Integer>();
    for (int i = 0; i < 1000; i++) {
        list.add(new Integer(i));
    }
    Collections.shuffle(list);
    System.out.println(list.get(0));

}

使用List Interface的add()方法在列表结构中按顺序添加范围中的每个数字。然后使用Collections类的shuffle来重新排列列表

Collections.shuffle()使用默认的随机源从给定列表生成随机数。

答案 2 :(得分:0)

你应该将体育指数存储在另一个整数中,我们可以检查这项运动是否已经被选中。首先将体育指数存储在一个字符串中。

public void sportPicker(){
    int[] sche=new int[4];
    String[] sports={"1-Cricket","2-Hockey","3-Tennis","4-Badminton"}
    int temp;
    Random rand=new Random();
    for(int a=1;a<=sports.length();a++){
        temp=rand.nextInt(4);
        if(temp!=sche[0]||temp!=sche[1]||temp!=sche[2]||temp!=sche[3]){
            sche[a]=temp;
        }
        else a--;
    }
}

这样可以确保索引不在数组方案中,如果它存在,它会使函数再次生成一个数字并检查。