首先,我的问题几乎和那里描述的一样:Array returning same values for all indexes除了它是针对Java而不是C#。 (我听说其中很相似)
这里有一些课程,我会尝试提供最详细的信息:
SomeInterface:不同类型像素的接口。
PixelTypeA:一种像素。
PixelTypeB:另一种像素。
(PixelTypeA和PixelTypeB实现/从SomeInterface继承)
PixelImage:这是有问题的类,它包含二维数组,其中包含所有方块的相同值,这里是声明:
SomeInterface[][] pixels;
现在,构造函数执行以下操作来分配内存(height和width是参数):
pixels = new SomeInterface[height][width];
到目前为止一切顺利。但是,调用PixelImage中的方法来加载PPM文件中的像素。该代码正常工作,因为如果我在一个像素的值保存在内存中后(在readfile循环中)测试它,它就没问题了。然而,我意识到在每次循环迭代之后(即在将每个像素保存在存储器中之后),像素阵列的所有值具有相同的值,并且这是保存的最后一个像素的值。这是循环中的重要代码:
pixels[row][col] = new PixelTypeA( pixelValue );
正如我所说的,如果我在下一行上进行像素[row] [col]的系统打印,它在其中具有正确的值,尽管像素二维数组中的每个其他索引也具有该值。 row和col正确递增。我对Java很新,我的假设是我错过了有关引用或类似内容的东西,这导致我在readfile循环的每次迭代时意外更新所有像素数组(或者可能是声明/初始化是问题?)。我试着自己解决这个问题好几个小时,但这真的令人沮丧。我更改了名称并且不能给你完整的代码,因为这是一项任务,我想自己做,我只需要线索,因为现在可能会导致这种奇怪的行为。
谢谢!
答案 0 :(得分:1)
您最有可能重复使用在数组中插入的对象,而不是每次都执行new
。
这意味着每个数组条目都指向设置为最新读取值的同一个对象。