2011-09-17 41 views
0

首先,我的問題是幾乎相同的,因爲描述: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循環的每次迭代中偶然更新所有像素數組(或者它可能是聲明/初始化是問題?)。我試圖自己解決這個問題幾個小時,但這已經變得非常令人沮喪。我改了名字,並且不能給你完整的代碼,因爲這是一個任務,我想自己做,我只是需要線索,因爲現在可能會導致這種奇怪的行爲。

謝謝!

+1

從三行代碼中很難判斷髮生了什麼。請展示一個簡短但完整的程序來展示問題 - 或者至少是代碼的重要部分。 –

+1

請發佈一個**最小**代碼片段,演示這個問題。 –

+0

好吧,我做了一個完全分離的片段來顯示我的問題,但它不再發生了!這導致我認爲或許,一直以來我都在尋找那些不是的問題。事實確實如此!問題出在PixelTypeA構造函數本身,它的一個版本接受了一個int數組,而不是複製/複製它,我只是將它的引用保存到一個屬性中。現在我感到非常愚蠢的錯誤,(感謝幫助傢伙! –

回答

1

你最有可能重複使用的,而不是做每一次new您在數組中插入對象。

這意味着每一個陣列入口點被設置爲閱讀最新的值相同的對象。

+0

即使我做像素[行] [col] =新的PixelTypeA(pixelValue); ? –

+0

@Mathieu:如果你沒有在你的問題中發佈一個完整的代碼示例,你將得到的唯一答案將是猜測(像這樣)... –

+0

是的,我現在正在編寫代碼片段,根據你的(和Jon的)請求! –