【问题标题】:Reading a 2D array by column按列读取二维数组
【发布时间】:2016-10-12 21:15:35
【问题描述】:

我有一个二维数组,每个索引处都有一个字符串,例如:

+-----+-----+-----+
|  h  |  l  |  o  |
+-----+-----+-----+
|  e  |  l  |  *  |
+-----+-----+-----+

我知道您可以通过索引 (0,0)、(0,1)、(0,2)、(1,0) 等打印出数组,例如:

for (int k = 0; k < transpositionMatrix.length; k++) {
    for (int k2 = 0; k2 < transpositionMatrix[k].length; k2++) {
        System.out.print(transpositionMatrix[k][k2]);
    }
}

但是,我想通过索引 (0,0), (1,0), (2,0) ... (n,0), (0,1), (0,2 ) ... (0,m),其中n 是行数,mm 行的列数。

换一种说法,我想“向下”阅读每一列而不是每一行。

以上面的二维数组为例,向下读取每一列将打印“hello*”,读取每一行将打印“hloel*”。我想实现前者。

如何使用 Java 做到这一点?

请注意,假定所有行的长度相同。

【问题讨论】:

    标签: java multidimensional-array


    【解决方案1】:

    访问您要查找的数组的方法称为 Column-Major ordering。请参阅 wikipedia 了解 Column-Major 和 Row-Major 排序之间的区别。

    为了解决您的问题,内部 for 循环应在外部 for 循环更改列号之前遍历所有行。

    for 循环如下所示:

    for (int column = 0; column < transpositionMatrix[0].length; column++) {
        for (int row = 0; row < transpositionMatrix.length; row++) {
            System.out.print(transpositionMatrix[row][column]);
        }
    }
    

    【讨论】:

      【解决方案2】:
      for (int k = 0; k < transpositionMatrix.length[0]; k++) {
          for (int k2 = 0; k2 < transpositionMatrix.length; k2++) {
              System.out.print(transpositionMatrix[k2][k]);
          }
      }
      

      这几乎只是翻转 for 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-12
        • 2013-06-06
        • 2015-09-10
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多