【问题标题】:Java array of objects with array issue具有数组问题的 Java 对象数组
【发布时间】:2012-05-15 11:43:56
【问题描述】:

已经为此工作了几个小时,所以我想我会问,当我创建这个对象的数组时,给定随机输入的内存数组会导致数组的其余部分具有相同的输出:请参阅代码下面。

蜜蜂类:

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,其余代码用于初始化蜜蜂。

【问题讨论】:

  • 请发布 GenerateRandomMemory 和 MeasureQuality。
  • 你对所有的 Bee 对象使用相同的数组 float[] randomMemory 吗?

标签: java arrays variables object


【解决方案1】:

GenerateRandomMemory() 输出相同的浮点数组实例。检查它或发布它的源代码。

【讨论】:

    【解决方案2】:

    似乎randomMemory 数组只初始化了一次。要么你在循环之前调用GenerateRandomMemory(),要么每次调用它都会返回相同的引用。

    【讨论】:

    • 我不认为是这样,因为quality在不同的对象之间是不同的。为使其正确,MeasureQuality() 应在每次运行时提供不确定的或至少不同的结果。
    • 除非他向我们提供完整的相关代码而不是这个缩短的版本,否则我们无法澄清这一点。
    猜你喜欢
    • 2021-07-19
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多