作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试通过引用转置矩阵,但没有成功,主体中的矩阵保持相同的状态。我能做什么?
附:该函数必须为“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/
我是一名优秀的程序员,十分优秀!