java - 将一维数组迭代为二维数组

标签 java arrays

我有,

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, index = 0;

如图here ,我们从原点创建二维的。但是我如何迭代我的 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

我认为这里的主要问题是在不创建二维索引的情况下获取列索引行索引。不是吗?

最佳答案

如果你想要行优先顺序,给定行 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

正如预期的那样。

关于java - 将一维数组迭代为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1817631/

相关文章:

java - 查询仅在子实体不为空时返回实体

java - 如何在自定义集合上使用 `Collections.min()`?

java - 为什么整数的 HashSet 或 LinkedList 不能转换为 int[]?

c++ - 读取特定行中的值(可变数量的值)并将它们存储在数组中

c++ - 从数组构造 std::set

java - NetBeans 制作的 jar 文件不起作用

java - 如何从java应用程序连接社交网站?

java - 注入(inject)与继承

php - 使用关联数组作为 php 函数的输入

c++ - 我收到 'Invalid Type Int[Int]...' ,但它没有任何意义