【发布时间】:2015-11-24 02:41:28
【问题描述】:
我写这个是为了生成随机的Candidate 对象来填充ArrayList pop。每个Candidate 都有一个数组,这段代码应该为每个Candidate 生成一个不同的数组:
ArrayList<Candidate> pop = new ArrayList<>();
int skinThicknes, attackDamage ,skinCoulor, canFly, canSwing, speed, flySpeed, swingSpeed, num = 0;
Random rnd;
rnd = new Random();
while(num < size) {
skinThicknes = rnd.nextInt(101);
attackDamage = rnd.nextInt(101);
skinCoulor = rnd.nextInt(3);
canFly = rnd.nextInt(1);
canSwing = rnd.nextInt(1);
speed = rnd.nextInt(1001);
flySpeed = rnd.nextInt(1001);
swingSpeed = rnd.nextInt(1001);
if(canFly == 0){flySpeed = 0;}
if(canSwing == 0){swingSpeed = 0;}
int[] array = {skinThicknes, attackDamage, skinCoulor, canFly, canSwing, speed, flySpeed, swingSpeed};
Candidate can;
can = new Candidate(array);
pop.add(can);
num++;
}
return pop;
为什么pop中每个Candidate的数组都相等?
这是Candidate 的构造函数。所有这些变量
(skinTicknes、attackDamage 等)是private static ints。
public Candidate(int[] geno){
skinTicknes = geno[0];
attackDamage = geno[1];
skinCoulor = geno[2];
canFly = geno[3];
canSwing = geno[4];
speed = geno[5];
flySpeed = geno[6];
swingSpeed = geno[7];
}
【问题讨论】:
-
rnd.nextInt(1);?真的吗?你认为这会返回什么? -
Candidate是如何实现的? -
嗯....不完全是。它会返回 0,而且只有 0。
-
这就是为什么你应该检查 API,因为它会告诉你。
-
如果每个候选人都与其他候选人相同,并且每次运行时候选人都不一样,那么问题可能出在候选人类。