下面这段程序,为什么再次输出a的值的时候,已经变成了c的值了?有点诡异
public class Test {
public final int TYPE_ADD = 1;
/**
* 矩阵类,实现n阶矩阵的加、乘、转置运算
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] a = { { 1, 2 }, { 2, 3 } };
int[][] b = { { 4, 5 }, { 6, 7 } };
Test m = new Test();
System.out.println("输出原始矩阵a:");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
System.out.println("两矩阵相加:");
int[][] r = m.matrix_add(a, b);
for (int i = 0; i < r.length; i++) {
for (int j = 0; j < r[i].length; j++) {
System.out.print(r[i][j] + "\t");
}
System.out.println();
}
System.out.println("再次输出原始矩阵a:");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
}
// 矩阵相加
public int[][] matrix_add(int[][] a, int[][] b) {
int[][] c = a;
if (inputLegal(a, b, TYPE_ADD)) {// 只有同型矩阵才能相加
for (int i = 0; i < a.length; i++) {// i控制行
for (int j = 0; j < a[i].length; j++) {// j控制列
c[i][j] = a[i][j] + b[i][j];
}
}
}
return c;
}
// 矩阵类型校验
public boolean inputLegal(int[][] a, int[][] b, int type) {
boolean flag = true;
if (type == TYPE_ADD) {
if (a.length != b.length || a[0].length != b[0].length) {
flag = false;// 判断是否为同型矩阵
}
}
return flag;
}
}
matrix_add
中有这句话不行int[][] c = a
这样c就指向了a,他俩是同一个内容,数组是引用类型,修改c就是在修改a
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。