2012-05-06 12 views
-1

これは数時間で作業していたので、私はこのオブジェクトの配列を作成すると、ランダムな入力が与えられたメモリ配列は配列の残りの部分を同じ出力を持っています:下のコードを見てください。配列の問題を持つオブジェクトのJava配列

ビークラス:

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

すべてのBeeオブジェクトに対して同じ配列float [] randomMemoryを使用していますか? –

答えて

0

GenerateRandomMemory()は、float配列の同じインスタンスを出力します。ソースコードを確認するか、ソースコードを投稿してください。

0

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

+0

私はそうではないと思います。異なるオブジェクト間では「品質」が異なるからです。これを正しくするために、 'MeasureQuality()'は、それぞれが実行されたときに非決定的な、あるいは少なくとも変化する結果を提供する必要があります。 – amit

+0

この短いバージョンの代わりに関連するコード全体を私たちに提供しない限り、これを明確にすることはできません。 – Feyyaz