我正在尝试转换2D数组。水平行的内容将传输到垂直列。
public static void change(short image[])
{
int arrayLength = 29; // row length
int arrayWidth = 10; // column length
// array with values
short[][] decompressedImage = new short[arrayLength][arrayWidth];
// array to store transposed image
short[][] transposedImage = new short[arrayWidth][arrayLength];
// store transposed values
for (int i=0;i<arrayWidth; i++){
for (int j=0;j<arrayLength; j++){
transposedImage[j][i]=decompressedImage[i][j];
}
}
}
答案 0 :(得分:1)
这里有一个旋转如何工作的例子,旋转实际上只是循环的中间位置(在评论下方),我也用输出的两个方向做了:
String[][] matrix = {{"A","B","C"},{"D","E","F"},{"G","H","I"}};
String[][] tmp = new String[matrix.length][matrix.length];
//PRINT BEFORE ROTATION
for(int row=0; row<matrix.length;row++){
for(int col=0; col<matrix.length;col++){
System.out.print(matrix[row][col] + " ");
}
System.out.println();
}
//HERE IS THE ROTATION
for(int row=0; row<matrix.length;row++){
for(int col=matrix.length-1; col>=0;col--){
tmp[col][row] = matrix[row][matrix.length-1-col];
}
}
//PRINT AFTER ROTATION
System.out.println("Rotated");
for(int row=0; row<matrix.length;row++){
for(int col=0; col<matrix.length;col++){
System.out.print(tmp[row][col] + " ");
}
System.out.println();
}
<强>输出:强>
A B C
D E F
G H I
Rotated
C F I
B E H
A D G
如果你想以第二种方式旋转它。
替换for //HERE IS THE ROTATION
由此:
for(int row=matrix.length-1; row >= 0; row--){
for(int col=0; col<matrix.length;col++){
tmp[col][row] = matrix[matrix.length-1-row][col];
}
}
<强>输出:强>
A B C
D E F
G H I
Rotated
G D A
H E B
I F C
答案 1 :(得分:0)
如果lowLength为29,则只能访问28。 因为索引从0开始。
更改
i < arrayWidth --> i < arrayWidth - 1
i < arrayLength --> i < arrayLength - 1
这只是一种可能性。
答案 2 :(得分:0)
更改以下行:
short[][] transposedImage = new short[arrayLength][arrayWidth];
而不是
short[][] transposedImage = new short[arrayWidth][arrayLength];
这是您更改后的代码:
int arrayLength = 29; // row length
int arrayWidth = 10; // column length
short[][] transposedImage = new short[arrayLength][arrayWidth];
short[][] decompressedImage = new short[arrayWidth][arrayLength];
// store transposed values
for (int i=0;i<arrayWidth; i++){
for (int j=0;j<arrayLength; j++){
transposedImage[j][i]=decompressedImage[i][j];
}
}
答案 3 :(得分:0)
假设arrayLength & arrayWidth
是length & width
的{{1}},循环结构
decompressedImage
实际上符合for (int i=0;i<arrayWidth; i++){
for (int j=0;j<arrayLength; j++){
transposedImage[j][i]=decompressedImage[i][j];
}
}
的维度,而不是transposedImage
的维度。你的循环变量decompressedImage
采用transposedImage的维度。
因此改变陈述
i & j
到
transposedImage[j][i]=decompressedImage[i][j];
我想这应该会有所帮助。
答案 4 :(得分:0)
您定义了维度transposedImage
的{{1}},但是,当您访问该数组时,您将循环到[arrayWidth][arrayLength]
,注意[arrayLength][arrayWidth]
和{{1}你的循环。根据循环,应该是,
i
而不是
j
更正了代码段,
transposedImage[i][j]=decompressedImage[j][i];