Java 如何从某个位置开始遍历2d数组?

Java 如何从某个位置开始遍历2d数组?,java,arrays,matrix,Java,Arrays,Matrix,我必须在整个矩阵中的任意位置X移动工件: 在每个新位置,我将其与该位置的值进行比较(为简单起见,矩阵中唯一的部分是X)。如果X从0开始,那么这样做很容易,但是在我的例子中,X块可以从矩阵中的任何位置开始,现在我首先从这个循环开始: for(int i = row_x;i<rows;i++) for(int j = col_x;j<cols;j++) //do something for(int i=row_x;i一种解决方案是将2D数组结构更改为1D数组,并

我必须在整个矩阵中的任意位置X移动工件:

在每个新位置,我将其与该位置的值进行比较(为简单起见,矩阵中唯一的部分是X)。如果X从0开始,那么这样做很容易,但是在我的例子中,X块可以从矩阵中的任何位置开始,现在我首先从这个循环开始:

for(int i = row_x;i<rows;i++)
    for(int j = col_x;j<cols;j++)
        //do something

for(int i=row_x;i一种解决方案是将2D数组结构更改为1D数组,并在1D中工作(而不是通过算法),然后应用以下方法:

init = rows*i+j;

for(int l = init; l<size;i++){
    //do things
}
init=行*i+j;

对于(int l=init;l您应该检查它是否是外部循环的第一次迭代:

for(int i = row_x; i < rows; i++)
  for(int j = (i == row_x ? col_x : 0); j < cols; j++)
    //do something
for(inti=row\ux;i
不要启动内部循环(从第x列开始循环列迭代,而是从第0个索引(第一列)开始)。
这将涵盖

中给出的字段。您可以提供一个代码示例或将此答案作为注释。谢谢,这是一个很好的答案。“您还可以获得更好的算法复杂性(O(n)而不是O(n²))”这句话有误导性。你还忘了你花时间把2D数组转换成1D。如果矩阵有维度
nxn
其中
N=8
,那么在最坏的情况下,你就有2D
O(8²)
。如果你先把它转换成1D,你就是在做
O(8²)
转换它。然后你访问的是1D数组,在最坏的情况下…
O(8 x 8)=O(8²)
…因此,如果你使用
~
符号(2D:
~O(8²)
与1D:
~2O(8²)
相比,你在这里有双重工作@KarelG我不是想用算法来做转换,只是建议他在没有必要的情况下使用一维数组而不是二维数组。也谢谢你的评论。