[英]simple Inplace square matrix clockwise rotation in java - what is wrong with my code
class RotateMat {
static Integer[] swap(int x, int y) {
int a=x;
int b=y;
a=a^b;
b=a^b;
a=a^b;
return new Integer[]{a,b};
}
static int[][] rotate(int[][] arr) {
assert arr.length == arr[0].length;
int m = arr.length;
for (int i=0; i<m;i++) {
for (int k=0; k<m;k++) {
//int[] temp_arr = swap(arr[i][k], arr[k][i]);
//arr[i][k] = temp_arr[0];
//arr[k][i] = temp_arr[1];
int temp = arr[i][k];
arr[i][k] = arr[k][i];
arr[k][i] = temp;
}
}
print(arr);
return arr;
}
static void print(int[][] arr) {
int n=arr[0].length;
int m=arr.length;
assert m==n;
//System.out.println(m + " " + n);
for (int i=0; i<m;i++) {
for (int j=0; j<n; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
public static void main(String[] args) {
int arr[][] = { {1,2,3}, {4,5,6}, {7,8,9}};
print(arr);
arr = rotate(arr);
print(arr);
}
}
我是C用户,正在尝试练习更多的Java编程。 我了解Java中的按值传递,这就是我尝试从rotate()函数返回旋转数组并将其再次分配给arr变量的原因。
即使旋转后也能打印出相同的阵列。...我在做什么错?
在第二个for循环中,您使用了错误的变量。 更改此:
for (int i=0; i<m;i++) {
for (int k=0; k<m;k++) {
^
int temp = arr[i][k];
arr[i][k] = arr[k][i];
arr[k][i] = temp;
对此:
for (int i=0; i<m;i++) {
for (int k=i; k<m;k++) {
^
int temp = arr[i][k];
arr[i][k] = arr[k][i];
arr[k][i] = temp;
这将产生输出:
123
456 <主方法中的第一个打印语句
789147
258 <旋转方法中的Print语句
369147
258 <main方法中的第二个打印语句
369
( 注意:我在打印语句之间添加了空格 )
最初从k = 0
开始,实际上是整个旋转(如果添加调试打印语句,则可以看到)。
实际上,您将其旋转了两次 ,因为您在rotate
方法中的内部循环遍历了整个长度。
尝试for (int k=0; k<i; k++)
。
您需要将对角线下方的元素与上方的元素交换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.