Ответ 1
Если вам нужен строковый порядок, заданный row rowIndex
, столбец columnIndex
и поддельный (из-за отсутствия лучшего термина) двумерный массив с столбцами numberOfColumns
, формула
rowIndex * numberOfColumns + columnIndex.
Если вам нужен строковый порядок, заданный row rowIndex
, столбец columnIndex
и поддельный (из-за отсутствия лучшего термина) двумерный массив с numberOfRow
строками, формула
columnIndex * numberOfRows + rowIndex.
Итак, предполагая порядок строк:
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]);
}
}
Вывод:
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
И если вы настаиваете на индексировании с использованием одиночного цикла for
, если принять основной порядок строк, требуемая формула выглядит следующим образом:
int column = index % numberOfColumns;
int row = (index - column) / numberOfColumns;
Если вы используете порядок столбцов, вам нужна следующая формула:
int row = index % numberOfRows;
int column = (index - row) / numberOfRows;
Итак,
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]);
}
выводит
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
как ожидалось.