我不确定是否一直盯着屏幕太长时间,我是否非常愚蠢,或者发生了什么奇怪的事情。
我有一个n * m双精度数组,Home.data
。我正在尝试将列0中的数据与用户选择的列中的数据进行交换,因此两者可以有效地互换。这是代码:
public class ChangeOrdinate {
public void rearrange(int index){
double[][] tempdata1 = Home.data;
double[][] tempdata2 = Home.data;
for(int i = 0; i < Home.data.length; i++){
Home.data[i][index] = tempdata1[i][0];
}
for(int i = 0; i < Home.data.length;i++){
Home.data[i][0] = tempdata2[i][index];
}
}
}
但是,此代码仅设法将数据从列0移动到“索引”列。 “索引”列中的数据永远不会返回到列0。
我在第一个循环中尝试过表达式的任一侧
System.out.println(tempdata2[I][index]);
,尽管没有引用它,但看来tempdata2
中的数据已被更改。我绝对不知道wtf会出错。有什么明显的我想念的吗?我不是那么菜鸟,所以要么晚了,我没有喝咖啡,要么晚了,我喝了太多咖啡。
提前谢谢了,
G
最佳答案
似乎tempdata2中的数据正在更改,尽管没有引用。
对Home.data
的引用的任何更改也会影响两个临时数组的引用。因此,这些不是副本,所有都指向内存中的同一数组。
至于交换号码,问题是您分配了a=b
,然后尝试分配b=a
(因为引用相同)。最终以b=b
结束
您也可以使用一个循环进行交换
for(int i = 0; i < Home.data.length; i++){
int tmp = Home.data[i][index];
Home.data[i][index] = Home.data[i][0];
Home.data[i][0] = tmp;
}