在 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
这就解释了为什么您只检索矩阵的一部分
首先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
这就解释了为什么您只检索矩阵的一部分