gpt4 book ai didi

java - java中简单的就地方阵顺时针旋转-我的代码有什么问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:56 27 4
gpt4 key购买 nike

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 < First print statement in main method
789

147
258 < Print statement inside rotate method
369

147
258 < Second print statement in main method
369

(注意:我在打印语句之间添加了空格)

当您最初从 k = 0 开始时,您实际上一直在旋转(如果您添加调试打印语句就可以看到)。

关于java - java中简单的就地方阵顺时针旋转-我的代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com