Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何随机选择要添加到数组列表中的多个对象之一?_Java_Arrays_Arraylist_Interface - Fatal编程技术网

Java 如何随机选择要添加到数组列表中的多个对象之一?

Java 如何随机选择要添加到数组列表中的多个对象之一?,java,arrays,arraylist,interface,Java,Arrays,Arraylist,Interface,假设我有4个对象,我希望用这四个对象填充一个包含100个元素的arraylist。基本上,每次我们向arraylist添加一个元素时,每个元素都有1/4的机会被选中。我想到了一种方法,但我认为有一种更好、更“漂亮”的方法&有效的方法 只是粗略的伪代码来帮助解释 for(int i = 0; i != 100; i++){ Random generator = new Random(); int i = generator.nextInt(4); // this will give

假设我有4个对象,我希望用这四个对象填充一个包含100个元素的arraylist。基本上,每次我们向arraylist添加一个元素时,每个元素都有1/4的机会被选中。我想到了一种方法,但我认为有一种更好、更“漂亮”的方法&有效的方法

只是粗略的伪代码来帮助解释

for(int i = 0; i != 100; i++){
    Random generator = new Random();
    int i = generator.nextInt(4); // this will give us 0,1,2,or 3
        if(i ==0){
            arraylist.add(object1(param1, param2));
        }
    // etc.. continues with 3 other else if statments and objects 

想法?我拥有的所有其他对象也共享相同的界面,如果这能帮助我们从包含四个对象的数组开始:

Object[] objects = new Object[] {
  object1(param1, param2),
  object2(param1),
  object3(param1, param2, param3, param4),
  object4(param1, param2)
}
然后调整代码:

Random generator = new Random();
for(int i = 0; i < 100; i++){
  int j = generator.nextInt(4); // this will give us 0,1,2,or 3
  arraylist.add(objects[j]);
  // etc.. continues with 3 other else if statments and objects
}
Random generator=new Random();
对于(int i=0;i<100;i++){
int j=generator.nextInt(4);//这将给我们0、1、2或3
add(objects[j]);
//等。如果状态和对象为其他3个,则继续
}

请注意,您不必在每次迭代时都创建一个新的生成器,您只需创建一次即可重用同一个实例。

如何指定它们的参数?请注意,其中一些有2个,一些有3个,等等请检查编辑后的答案。您可以在首次创建对象时使用这些参数。感谢您的编辑。如果参数是一个返回随机数的函数呢?每次创建对象时,是否会调用返回随机数(作为其参数传递)的函数?希望我在Java中制作的senseParameters不能是函数。您可以做的是向这些对象添加一个方法。该方法每次都可以返回一个随机值。例如,object1将是一个
new RandomGenerator(param1,param2)
,它将有一个名为
public int getNewRandom()
的方法,该方法返回类似
return generator.nextInt()
的内容。然后每次调用getNewRandom()时,它都会返回不同的值,尽管RandomGenerator对象相同。明白了。我认为没有比将生成随机数的逻辑移动到对象本身更好的解决方案了。您还可以使用静态方法作为对象工厂,这可能会使代码更简单、更易于阅读(例如
ObjectFactory.newObject(objectType)
)。