繁体   English   中英

遍历二维数组

[英]Looping through 2d array

我在使用此代码时遇到困难。 我试图返回一个2d,它是输入数组的反面。 我不确定如何正确编码。 也许有人可能有一些建议

public class arrays {
    int[][] transpose(int[][] a) {
        int[][] good = new int[a.length][a.length]; /* assign dimension, I want it to be the same as input */

        for (int i = 0; i < a.length; i++) {
            for (int k = 0; k < a[k].length; k++) { // //nested loop to go through the rows and columns
                good[i][k] = a[k][i]; // /// switch elements
            }
        }
        return good;
    }
}

您需要仔细考虑哪个变量表示行,哪个变量表示列。 以及在哪个数组中( agood )。

当我在您的代码中切换这些代码时,此改进的版本可以正常工作:

public class Arrays {
    static int[][] transpose(int[][] a) {
        // Only works if a is rectangular (every row in a has the same number of columns)
        int[][] good = new int[a[0].length][a.length];

        for (int i = 0; i < a.length; i++) {
            // Use a[i].length, not a[k].length because k will be bigger than a.length at some point.
            for (int k = 0; k < a[i].length; k++) {
                // i = row in 'a', column in 'good'
                // k = column in 'a', row in 'good'
                good[k][i] = a[i][k];
            }
        }
        return good;
    }
}

问题是:

  1. int[][] good = new int[a.length][a.length]; 即使原始形状可以是任何矩形形状(不同的行数和列数),在这里您也可以good创建一个正方形矩阵。 您需要切换行和列的数量,因此new int[a[0].length][a.length]是一个很好的解决方案。 (假设所有行具有相等的列数,这在矩阵中是必需的)
  2. for (int k = 0; k < a[k].length; k++)在这里, k将一直增大直到大于a.length ,并且您将获得ArrayIndexOutOfBoundsException您想遍历第i行中的所有列,因此上限是a[i].length ,而不是a[k]
  3. good[i][k] = a[k][i]记住i是该行中的a ,而不是在good good ,它是专栏。 因此,您需要在分配的两边交换i和k。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM