2012-05-06 2 views
-1

Работая над этим в течение нескольких часов, я подумал, что спрошу: когда я создаю массив этого объекта, массив памяти, которому задан случайный ввод, заставляет остальную часть массива имеют тот же результат: см. код ниже.Ядро массива объектов с проблемой массива

Bee Класс:

private class Bee{ 
    private int status; 
    private float[] memory; 
    private double quality; 
    private int visits; 

    private Bee(int status, float[] memory, double quality, int visits){ 
     this.status = status; 
     this.memory = memory; 
     this.quality = quality; 
     this.visits = visits; 
    } 
} 

Индивид качество пчел при печати отличаются пока их память оставаться все-таки.

for(int i = 0; i < this.bees.length; i++){ 
    System.out.println(this.bees[i].memory[0]+" "+this.bees[i].memory[1]); 
    System.out.println(this.bees[i].quality); 
} 

Пример вывода:

3.4968524 8.354554 
1581.5435920638447 
3.4968524 8.354554 
82.46318172154176 
3.4968524 8.354554 
66.25267691464408 

Я не понимаю, почему качество работает, но не память?

Любая помощь или предложения были бы весьма признательны.

EDIT:

for(int i = 0; i < totalNumberbees; i++){ 
    int beestatus; 

    if(i < numberInactive){ 
     beestatus = 0;//inactive 
     indexesOfInactivebees[i] = i; 

    } else if(i < (numberInactive + numberScout)){ 
     beestatus = 2;//scout 

    } else{ 
     beestatus = 1;//active 
    } 

    float[] randomMemory = GenerateRandomMemory(); 
    this.bees[i] = new Bee(beestatus, randomMemory, MeasureQuality(randomMemory), 0); 
} 

private float[] GenerateRandomMemory(){ 
    float[] result = new float[this.functionData.vars.length]; 
    result = this.functionData.vars; 

    for(int i = 0; i < result.length; i++){ 
     float r1 = new Random().nextFloat()*10; 
     result[i] = r1; 
    } 
    return result; 
} 

Вот GenerateRandomClass и остальная часть кода в инициализируется пчел.

+4

Пожалуйста, напишите GenerateRandomMemory и MeasureQuality. – Krrose27

+0

Вы используете тот же массив float [] randomMemory для всех объектов Bee? –

ответ

0

GenerateRandomMemory() выводит один и тот же экземпляр массива с плавающей точкой. Проверьте его или отправьте его исходный код.

0

Кажется randomMemory массив инициализируется только один раз. либо вы вызываете GenerateRandomMemory() перед циклом, либо он возвращает ту же ссылку каждый раз, когда ее вызывают.

+0

Я не думаю, что это так, так как «качество» находится между разными объектами. Для того, чтобы это было правильно, 'MeasureQuality()' должен обеспечивать не детерминированный или, по крайней мере, изменяющийся результат каждого запуска. – amit

+0

Мы не можем прояснить это, если он не предоставит нам весь соответствующий код вместо этой сокращенной версии. – Feyyaz

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