2011-09-17 5 views
0

まず第一に、私の問題はそこに記述されているものとほとんど同じです:Array returning same values for all indexes Java用でC#用ではありません。Java配列はすべてのインデックスを書き換えます

SomeInterface:ピクセルの異なる種類のインタフェースを(私はしかし、かなり類似していた聞いたことがある)

は、いくつかのクラスは、ここでプレーしている、私はほとんどの詳細を与えることをしようとします。

PixelTypeA:1つのタイプのピクセル。

PixelTypeB:別のタイプのピクセル。

(PixelTypeAとPixelTypeBはSomeInterface継承/実装)

PixelImage:それは問題のクラスの、それにすべての正方形のために同じ値を持つ二dimensionnal配列を含み、ここで宣言がある:

これまでのところ

pixels = new SomeInterface[height][width]; 

SomeInterface[][] pixels; 

さて、コンストラクタは、メモリを(高さと幅はパラメータです)を割り当てるには、以下行いますとても良い。しかし、その後、PixelImageのメソッドを呼び出して、ピクセルをPPMファイルからロードします。そのコードは正しく動作します。なぜなら、(readfileループ内の)メモリに保存された直後にピクセルの値をテストすると問題ないからです。しかし、各ループ反復後(すなわち、各ピクセルをメモリに保存した後)に、ピクセル配列のすべての値が同じ値を有し、それが最後に保存されたピクセルの値であることを認識した。ここでループ内の重要コードがある:

pixels[row][col] = new PixelTypeA(pixelValue); 

私は次の行の画素のシステムプリント[行] [COL]を行う場合、他のすべてのも、それは、その中に正しい値を有する、前記のようにピクセル2次元配列のインデックスもその値を持ちます。 rowとcolは正しくインクリメントされます。私はかなりJavaに慣れていて、私の前提は、readfileループの各繰り返しですべてのピクセル配列を誤って更新する原因となっているような参照や何かに関するものを見逃してしまったということです(あるいは宣言/初期化は問題ですか?)。私はこれを数時間かけて自分で解決しようとしましたが、これは本当にイライラしました。私は名前を変更しました。これは課題なので完全なコードを与えることはできません。私は自分でそれをやりたがっています。私はちょうどその奇妙な行動を引き起こすかもしれないものとして単なる手がかりを必要としています。

ありがとうございました!

+1

3行のコードから何が起こっているのかを知るのは非常に難しいです。問題を示す短くても完全なプログラムを表示するか、少なくともコードの重要な部分を表示してください。 –

+1

問題を示す**最小**のコードスニペットを投稿してください。 –

+0

私の問題を示すために完全に分離したスニペットを作ったが、それはもう起こっていなかった!おそらく、私はそれがそうでない場所で問題を探していると思うようになった。それは事実でした! PixelTypeAコンストラクタ自体に問題がありました。その1つのバージョンがintの配列を受け入れ、コピー/複製する代わりに、その参照を属性に保存するだけでした。今私はそれを見逃して本当に愚かであると感じている;(助けてくれてありがとう! –

答えて

1

毎回newを実行する代わりに、配列に挿入したオブジェクトを再利用する可能性が最も高いです。

これは、すべての配列エントリが、読み込まれた最新の値に設定された同じオブジェクトを指していることを意味します。

+0

ピクセル[行] [col] =新しいPixelTypeA(pixelValue)でも、 ? –

+0

@マチュー:質問に完全なコード例を載せていないと、あなたが得ようとしている唯一の答えは(このような)推測になります... –

+0

ええ、私は今すぐコードスニペットに取り組んでいます上記のあなたの(そしてジョンの)要求に従って! –

関連する問題