我有,
int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, index = 0;
Run Code Online (Sandbox Code Playgroud)
如图所示这里,我们创建一个从原点的二维之一.但我怎么重复我的oneDim里面for (index = 0; index < 10; index++),这样我可以让我的列索引和行索引 有 没有建立一个新的?我希望它在将索引打印到二维数组(2x5)时看起来像这样:
0,0
0,1
1,0
1,1
2,0
2,1
3,0
3,1
4,0
4,1
Run Code Online (Sandbox Code Playgroud)
我认为这里的主要问题是获取列索引和行索引而不创建二维索引.不是吗?
jas*_*son 32
如果你想要行主要的顺序,给定行rowIndex,列columnIndex和伪造(缺少一个更好的术语)一个带有numberOfColumns列的二维数组,公式是
rowIndex * numberOfColumns + columnIndex.
Run Code Online (Sandbox Code Playgroud)
如果你想要行主要顺序,给定行rowIndex,列columnIndex和伪造(缺少一个更好的术语)一个带numberOfRow行的二维数组,公式是
columnIndex * numberOfRows + rowIndex.
Run Code Online (Sandbox Code Playgroud)
因此,假设行主要顺序:
int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int rows = 2;
int columns = 5;
for (int row = 0; row < rows; row++) {
for (int column = 0; column < columns; column++) {
System.out.println(row + ", " + column + ": " + oneDim[row * columns + column]);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
0, 0: 1
0, 1: 2
0, 2: 3
0, 3: 4
0, 4: 5
1, 0: 6
1, 1: 7
1, 2: 8
1, 3: 9
1, 4: 10
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用单个for循环进行索引,假设行主要顺序,您需要的公式如下:
int column = index % numberOfColumns;
int row = (index - column) / numberOfColumns;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是列主要订单,则需要的公式如下:
int row = index % numberOfRows;
int column = (index - row) / numberOfRows;
Run Code Online (Sandbox Code Playgroud)
所以,
int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int rows = 2;
int columns = 5;
for(int index = 0; index < 10; index++) {
int column = index % columns;
int row = (index - column) / columns;
System.out.println(row + ", " + column + ": " + oneDim[index]);
}
Run Code Online (Sandbox Code Playgroud)
将输出
0, 0: 1
0, 1: 2
0, 2: 3
0, 3: 4
0, 4: 5
1, 0: 6
1, 1: 7
1, 2: 8
1, 3: 9
1, 4: 10
Run Code Online (Sandbox Code Playgroud)
正如所料.