返回坐标对的2D数组的1D数组的整数索引

时间:2017-03-24 03:56:02

标签: java arrays matrix

在阅读了10多个关于将整个数组从2D转换为1D的线程之后,反之亦然,我想知道是否有数学公式,不需要迭代来返回一对的索引位置排序的2D数组的整数。

我的“网格”总是正方形,可以是任意大小(在这个例子中是3x3),我有一个人类友好值的排序块,我需要从中检索我所谓的“真正的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, 等等...

我已经玩了六个方程式,我尝试将坐标添加到前一行索引平方,我永远无法为网格中的每个单元格得到正确的结果。我缺少一些特殊的算子或数学函数吗?

感谢。

2 个答案:

答案 0 :(得分:1)

让矩阵为3 * 3,3行和3列,我们必须找到(i,j)的索引,然后公式将是。 indices = 3 *(i-1)+ j;

注意: - 这里3 * 3和i,j不是java 2d数组格式,它是人类友好的坐标。

示例(i,j)=(2,3) indices = 3 *(2-1)+3 = 6 因为你的指数从0开始,你可以简单地从6中减去1,即5。

答案 1 :(得分:0)

如果索引名为[index1,index2],

1DIndex = (rowNumber*index1) + index2

其中rowNumber从第一行的1开始,index1和index2是Java索引。