首先,我的問題是幾乎相同的,因爲描述:Array returning same values for all indexes除了它是針對Java,而不是C#。 (我聽到的都是很相似但是)Java數組重寫所有指標
幾類都在這裏打球,我會盡量給了最細節:
SomeInterface:針對不同類型的像素的接口。
PixelTypeA:一種像素。
PixelTypeB:另一種類型的像素。
(PixelTypeA和PixelTypeB實施/從SomeInterface繼承)
PixelImage:這是有問題的類,它包含有在其所有的廣場相同的值兩dimensionnal陣列,這裏是聲明:
現在SomeInterface[][] pixels;
,構造執行以下操作來分配存儲器(高度和寬度參數):到目前爲止
pixels = new SomeInterface[height][width];
太好了。但是,然後調用PixelImage中的方法來加載PPM文件中的像素。該代碼工作正常,因爲如果我測試一個像素的值後保存在內存中(在readfile循環),它是正常的。然而,我意識到在每次循環迭代之後(即,在將每個像素保存在存儲器中之後),像素陣列的所有值具有相同的值,並且這是保存的最後一個像素的值。這裏是循環中的重要代碼:
pixels[row][col] = new PixelTypeA(pixelValue);
正如我所說的,如果我做像素[行] [COL]下一行的系統打印,它有它的正確價值,但所有其他像素二維數組中的索引也具有該值。行和列正確遞增。我對Java很陌生,我的假設是我錯過了關於引用或類似的東西,這導致我在readfile循環的每次迭代中偶然更新所有像素數組(或者它可能是聲明/初始化是問題?)。我試圖自己解決這個問題幾個小時,但這已經變得非常令人沮喪。我改了名字,並且不能給你完整的代碼,因爲這是一個任務,我想自己做,我只是需要線索,因爲現在可能會導致這種奇怪的行爲。
謝謝!
從三行代碼中很難判斷髮生了什麼。請展示一個簡短但完整的程序來展示問題 - 或者至少是代碼的重要部分。 –
請發佈一個**最小**代碼片段,演示這個問題。 –
好吧,我做了一個完全分離的片段來顯示我的問題,但它不再發生了!這導致我認爲或許,一直以來我都在尋找那些不是的問題。事實確實如此!問題出在PixelTypeA構造函數本身,它的一個版本接受了一個int數組,而不是複製/複製它,我只是將它的引用保存到一個屬性中。現在我感到非常愚蠢的錯誤,(感謝幫助傢伙! –