在Java中访问不带坐标的二维数组索引

在Java中访问不带坐标的二维数组索引,java,arrays,Java,Arrays,假设我们有一个名为grid的8 x 8 2d整数数组,并尝试在[5][5]处选择元素0 int[][] grid = new int{{1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,

假设我们有一个名为grid的8 x 8 2d整数数组,并尝试在[5][5]处选择元素0

int[][] grid = new int{{1,1,1,1,1,1,1,1},
                       {1,1,1,1,1,1,1,1},
                       {1,1,1,1,1,1,1,1},
                       {1,1,1,1,1,1,1,1},
                       {1,1,1,1,1,1,1,1},
                       {1,1,1,1,1,0,1,1},
                       {1,1,1,1,1,1,1,1},
                       {1,1,1,1,1,1,1,1}};
现在的问题是,是否可以不使用坐标访问元素0的索引,而只使用一个数字

示例:访问数字为45的元素0,如1d数组

我试图用for循环来解决这个问题,但它给了我超出范围的错误

int x = 0;
int y = 0;

for (int i = 0;i<45;i++) {

   x += 1;

   if (x > grid[y].length) {

     x = 0;
     y += 1;

}
intx=0;
int y=0;
对于(int i=0;i网格[y]。长度){
x=0;
y+=1;
}

上面的代码应该添加x和y,直到到达目标元素。

最终您将不得不使用这两个索引

只要给一个数字,就可以计算出x和y

公共静态int getAt(int[][]矩阵,int位置){
int columns=矩阵[0]。长度;//列大小,矩阵必须至少为1x1
返回矩阵[位置/列][位置%列];
}
公共静态无效集合(int[][]矩阵,int位置,int值){
int columns=矩阵[0]。长度;//列大小,矩阵必须至少为1x1
矩阵[位置/列][位置%列]=值;
}
同样在您的示例中:

1) 您不需要使用for循环(最终要访问或修改矩阵,您必须同时使用这两个索引)

2) 当y大于或等于行大小(本例中为8)时,您将收到一个越界异常,因为您只有8列

最后,使用一个索引访问它的唯一方法是将矩阵转换为一维数组

在这里,您可以看到:

如果(x==grid[y].length),它可能应该是
你能把一维数组重新转换成二维数组吗当然可以,但那没有多大意义。这是一项要求吗?。在这里你可以看到如何:我将尝试每个解决方案,看看哪一个最有效使用你的模方法计算位置是meGreat最有效的解决方案,如果只使用一个索引不是绝对要求,使用mod div更容易。