如果你想定的行優先的順序,排rowIndex
,列columnIndex
並僞造(因爲缺乏一個更好的詞)與numberOfColumns
列的二維數組,其公式爲
rowIndex * numberOfColumns + columnIndex.
如果你想行優先順序,給定的行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
預期。
咦?你想要一個一維數組看起來像一個二維數組? –
@Simon Righarts:這是標準。編譯器每天都會爲你做。 – jason
tomiko,正如你所看到的人們正在努力理解你的問題,而不是努力解決你的問題。請回顧你的問題,以便我們不必費盡腦筋去理解你。我確信你想要做的事很簡單,一旦你花時間表達自己,我相信你會得到一些有意義的幫助。 – pstanton