it-swarm-ja.tech

2D配列インデックスを1Dインデックスに変換します

Javaでコーディングしているチェスバリアント用の2つの配列があります...これまでのところ、ボードを1D配列(サイズは32)として表すコンソールバージョンがありますが、そのためのGUIの作成に取り組んでおり、必要です。 4x8グリッドとして表示されるので、JPanelsの2次元配列があります...

質問は、4x8配列であるという事実を前提として、array [i] [j]インデックスをarray [i]に変換できる式はありますか?

16
Becky

4列×8行の場合:

i = row * 4 + col

編集:私の悪い、誰も明らかにこの間違いで私を捕まえませんでした。しかし、実際にはrow * 4 + col

row * 8 + colは、可能なインデックスに不要なギャップを残します。

20
Steve Wortham

このように考えてください:

たまたま1次元配列である1つの配列があります。これは、実際には、2次元配列の項目の長い連結です。

したがって、サイズが5 x 3(5行、3列)の2次元配列があるとします。そして、1次元配列を作成したいと思います。行ごとに連結するか、列ごとに連結するかを決定する必要があります。この例では、連結は行ごとであると言います。したがって、各行の長さは3列であるため、1次元配列は3の「ステップ」で定義されていると考える必要があります。したがって、1次元配列の長さは5 x 3 = 15になり、次のようになります。アクセスポイントを見つける必要があります。

したがって、2次元配列の2番目の行と2番目の列にアクセスしているとすると、3ステップ(最初の行)+ 2番目の行のステップ数、つまり3 + 2 = 5になります。は-1であるゼロベースのインデックスであるため、インデックス4になります。

今、特定の定式化のために:

int oneDindex = (row * length_of_row) + column; // Indexes

したがって、上記の例として、あなたは持っていることになります

oneDindex = (1 * 3) + 1

そしてそれはそれであるはずです

24
Michael

2D配列のすべての行は、1D配列の端から端まで配置されます。 iは現在の行を示し、jは列(その行までの距離)を示します。したがって、ith行にいる場合は、iの完全な行を端から端まで配置し、さらにjを追加して単一の配列インデックスを取得する必要があります。

だからそれは次のようなものになります
singleDimIndex = array[0].length * i + j

9
Matt Greer

i*8+j(8が水平方向の幅であると仮定)

3
mr grumpy