Java数组重写所有索引

时间:2011-09-17 09:57:13

标签: java arrays loops reference

首先,我的问题几乎和那里描述的一样: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循环的每次迭代时意外更新所有像素数组(或者可能是声明/初始化是问题?)。我试着自己解决这个问题好几个小时,但这真的令人沮丧。我更改了名称并且不能给你完整的代码,因为这是一项任务,我想自己做,我只需要线索,因为现在可能会导致这种奇怪的行为。

谢谢!

1 个答案:

答案 0 :(得分:1)

您最有可能重复使用在数组中插入的对象,而不是每次都执行new

这意味着每个数组条目都指向设置为最新读取值的同一个对象。