gpt4 book ai didi

java - 如何在java中通过引用转置矩阵

转载 作者:行者123 更新时间:2023-12-01 11:45:41 24 4
gpt4 key购买 nike

我尝试通过引用转置矩阵,但没有成功,主体中的矩阵保持相同的状态。我能做什么?

附:该函数必须为“void”

谢谢!

 public static void trans(int a[][]) {
int n = a.length;
int m = a[0].length;
int b[][] = new int[m][n];
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[0].length; j++) {
b[i][j] = a[j][i];
}
}
a = b;
}
public static void main(String[] args) {
int a[][] = {{1,2,3},
{4,5,6}};
trans(a);

System.out.println("*****************************");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
}

最佳答案

主要错误在于该行

a = b;

在这里您将链接分配给数组 b到数组 a 的链接(此链接是局部变量)。

要么应该复制数组而不是分配链接,要么应该使用初始数组 a循环内。当然,如果矩阵是二次的( n x n ),这一切都是可能的。

复制数组(无效的方式!)看起来像:

for (int i = 0; i < dim; ++i)
System.arraycopy(b[i], 0, a[i], 0, dim);

数组内部的处理如下:

int dim = a.length;
assert a[0].length == dim; // quadratic

for (int i = 0; i < a.length; ++i)
for (int j = 0; j < i; ++j)
a[i][j] = a[j][i];

此外,现在不可变行为优于可变数组,因此您可以让函数返回新数组,而不是改变旧数组(您可以在 @AlexFitzpatrick 的答案中找到解决方案)。

最后一个想法是,您可以将对数组的引用传递给该方法。这可以通过一些包装器或内置的 AtomicReference 来实现.

那么你的方法将接受 not int[][] ,但是AtomicReference<int[][]> ,所以它最终看起来像:

public static void trans(AtomicReference<int[][]> aWrapper) {
...
int[][] a = aWrapper.get();
for ...
for ...
b[i][j] = ...
aWrapper.set(b);
}

关于java - 如何在java中通过引用转置矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153160/

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