2015-11-24 4 views
-2

Я написал это для создания случайных 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; 

Почему массивы каждого Candidate в pop равен?


Это конструктор для Candidate. Все эти переменные (skinTicknes, attackDamage и т. Д.) Являются private static int.

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]; 
} 
+1

'rnd.nextInt (1);'? В самом деле? Как вы думаете, что это вернет? –

+0

Как реализуется «Кандидат»? – resueman

+0

0 или 1 ... это то, что я хочу, чтобы он вернулся – fatd

ответ

0

Если вы читали API вы заметите, что rnd.nextInt(1) всегда будет возвращать ноль (0). Это означает, что ваши значения canFly и canSwing всегда будут одинаковыми, что в свою очередь означает, что ваши flySpeed и swingSpeed всегда будут одинаковыми.

После этого, я думаю, нам нужно увидеть определение Candidate, чтобы понять, почему остальное всегда одно и то же. Почему вы считаете, что все элементы ArrayList одинаковы? Можете ли вы показать нам код для этого тоже?

Смежные вопросы