2017-03-24 14 views
2

配列全体を2Dから1Dに変換する場合とその逆の場合については、には反復処理を必要としない数式があるかどうか疑問です。ソートされた2D配列の整数の組のインデックス位置を返します。2D配列の座標ペアの1D配列の整数インデックスを返します

私の "グリッド"は常に正方形で、任意のサイズ(この例では3x3)であり、私は人間のフレンドリーな値のブロックを取得しており、そこから私が "True 1Dこのような指標」:

"Human-friendly" coordinates| Java 2D Indices | True 1D indices 
    [1,1],[1,2],[1,3], ==> [0,0],[0,1],[0,2], ==> 0 , 1 , 2 
    [2,1],[2,2],[2,3], ==> [1,0],[1,1],[1,2], ==> 3 , 4 , 5 
    [3,1],[3,2],[3,3], ==> [2,0],[2,1],[2,2], ==> 6 , 7 , 8 

は、だから私は、私に次のような結果を与えるために私のクラスのメソッドが必要になります。

私は1,1を入力して、バック0を取得し、 私は3,2を入力して取り戻します7、 2,3を入力して戻って5、 など。

私は、前回の行のインデックスの二乗に座標を追加するようなことを試みる半ダースの式を使いました。グリッド内のすべてのセルについて決して正しい結果を得ることはできません。何か特別な演算子や数学関数がありますか?

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

答えて

1

行列を3 * 3、3行3列とし、(i、j)のインデックスを見つけなければならない。 インデックス= 3 *(i-1)+ j;

注:ここでは3 * 3とi、jはJava 2d配列形式ではありません。

例(I、J)=(2,3) インデックス= 3 *(2-1)+3 = 6 そして、あなたのインデックスは0から始まるので、あなたは、単に6すなわち5

から1を引くことができ
+0

私はあなたがそれを持っていると思います。したがって、最初の定数は、人間にやさしい形式の合計行数です。末尾と括弧内の1を引くことは、基本的にjavaの行、列の値を使用することと同じです。だから私が(N行* Java行)+ Java_columnをテストすると、私は9つのセルすべてに対して正しい答えを得ます。あなたがこのことをどのように知っていたか尋ねてもいいですかこれはアレイの平坦化の一般的な式ですか?それは適切な名前を持っていますか?本当にありがとう。 – JacobIRR

+1

いいえ、私は個々に配列の異なる値の異なる数式をフレームにしようとし、最後にこの数式で来ました。この式に適切な名前があるかどうかわかりません。 –

0

インデックスは[index1の、INDEX2]と命名されている場合、

1DIndex = (rowNumber*index1) + index2 

ROWNUMBERが最初の行のための1で始まり、そしてインデックス1及びINDEX2がJava指標です。

+0

私が3,2を入力して7に戻ったければ、あなたの例でどのように見えますか? – JacobIRR

+0

Javaインデックスは入力インデックスより1小さいです。だからあなたの方法は、最初にそれらを両方とも1から2,1だけ減らすでしょう。次に、2,1は3x3行列の3番目の行にあるので、3 * 2 + 1 = 7になります。 – dukr

+0

行番号を知るためには、グリッドのサイズも知っておく必要があります。 – dukr

関連する問題