在 java 中转置 int[][] 类型数组的一部分

Transposing a section of an int[][] type array in java

首先post所以提前为糟糕的形式道歉。我正在为我的介绍性 java 课程开发一个项目,我只需要转置较大数组的一部分。在这种特殊情况下,我得到了这个数组:

int[][] array = {{1, 2, 3, 4},{11, 12, 13, 14, 15, 16},{21, 22, 23, 24},{31, 32, 33}};

方法接收输入数组,rowStart,rowEnd,colStart,colEnd参数

所以例如上面数组的输入:transpose(array,0,3,1,2) 应该 return 一个看起来像 {{2,12,22,32},{3,13,23,33}}

的数组

我的直觉是使用一个嵌套循环,一个索引列#,并在该循环中索引行#,然后获取这些并将它们移动到输出数组中。我想这是可能的,但我遇到了一些麻烦。这是我编写的代码以及上面示例的输出:

public static int[][] transpose(int[][] matrix, int rowStart, int rowEnd, int colStart, int colEnd) {
    int[][] newArray = new int[colEnd-colStart][rowEnd-rowStart];


    for (int i = colStart; i < colEnd; i ++ ){
      for(int j = rowStart; j < rowEnd; j ++){
        newArray[i-colStart][j-rowStart] = matrix[j][i];
      }
    }
   return newArray; 
  }

向它提供我在开始时提供的数组:

> int[][] array = {{1, 2, 3, 4}, {11, 12, 13, 14, 15, 16}, {21, 22, 23, 24}, {31, 32, 33}};
> Array2Lab.transpose(array, 0, 3, 1,2 )
{ { 2, 12, 22 } }

这是正确输出的一小部分。

我对数组还是有点陌生​​,但我的直觉是我要么使输出数组太小,要么 started/ended 索引在错误的位置。

感谢阅读,非常感谢任何帮助!

固定版本:

public static int[][] transpose(int[][] matrix, int rowStart, int rowEnd, int colStart, int colEnd) {
  int[][] newArray = new int[colEnd-colStart+1][rowEnd-rowStart+1];


    for (int i = colStart; i < colEnd+1; i ++ ){
      for(int j = rowStart; j < rowEnd+1; j ++){
        newArray[i-colStart][j-rowStart] = matrix[j][i];
      }
    }
   return newArray; 

问题出在您为计数器取的上限值:

i < colEnd
j < rowEnd

您应该包括该上限值:

i <= colEnd
OR 
i < colEnd + 1

这就解释了为什么您只检索矩阵的一部分