所以我正在尝试制作体育比赛日程表生成器。这从包含字段名称的数组中随机选择。如何使它不会两次选择相同的字段?
Random rand = new Random();
int index, loc;
index = rand.nextInt();
loc = rand.nextInt(y);
System.out.print(fields[loc]);
答案 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--;
}
}
这样可以确保索引不在数组方案中,如果它存在,它会使函数再次生成一个数字并检查。