-1

これに数時間取り組んでいるので、このオブジェクトの配列を作成すると、ランダムな入力が与えられたメモリ配列により、配列の残りの部分が同じ出力になります: 以下のコードを参照してください。

蜂クラス:

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

なぜ品質が機能しているのにメモリが機能していないのかわかりませんか?

どんな助けや提案も大歓迎です。

編集:

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

2 に答える 2

0

randomMemory配列は一度だけ初期化されるようです。ループの前に呼び出しているか、呼び出さGenerateRandomMemory()れるたびに同じ参照を返します。

于 2012-05-06T20:49:03.083 に答える
0

GenerateRandomMemory()float 配列の同じインスタンスを出力します。それをチェックするか、そのソースコードを投稿してください。

于 2012-05-06T20:42:58.010 に答える