public static int[][] rotate(int[][] array){
int height = array.length;
int width = array[0].length;
int[][] rotatedArray = array;
for(int col = 0; col < width; col++){
for(int row = 0; row < height; row++){
rotatedArray[row][col] = array[col][row];
}
}
return rotatedArray;
}
这是我的代码,作为将图像反向旋转 90 度的方法,但它不起作用。我不知道如何排列新的行和列并正确旋转它,我该如何解决?谢谢!
试试rotatedArray[row][col] = array[col][height - row - 1];
.
此外,您需要将rotatedarray
定义为新数组。现在,您将其分配给array
,这意味着它们都引用相同的数据。
以下是您可以做到这一点的方法:
public static int[][] rotate(int[][] array) {
int height = array[0].length;
int width = array.length;
int[][] rotatedArray = new int[height][];
for(int row = 0; row < height; row++) {
rotatedArray[row] = new int[width];
for(int col = 0; col < width; col++) {
rotatedArray[row][col] = array[col][height - row - 1];
}
}
return rotatedArray;
}
请注意,原始数组的高度将成为新数组的宽度,反之亦然。
通过使用rotatedArray[row][col] = array[col][row]
转置行和列索引,您可以沿对角线镜像图像,而不是旋转它。想一想 - 两个索引匹配的任何条目(如 array[0][0]
或 array[1][1]
)都保持不变。那不是你想要的!
我建议画一幅画,看看你看到什么图案。您可以从非常小的示例开始,2×2 或 3×3。