如何在Java数组中交换数据列

时间:2016-07-22 23:07:35

标签: java

我不确定我是否一直盯着屏幕看太久,我非常愚蠢,或者有些奇怪的事情发生。

我有一个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列移动到“索引”列。 “index”列中的数据永远不会返回到第0列。

我在第一个循环中尝试了System.out.println(tempdata2[I][index]);表达式的任一侧,并且看起来tempdata2中的数据正在被更改,尽管没有对它的引用。

我完全不知道wtf出错了。有什么明显我想念的吗?我不是那个很多菜鸟,所以要么已经晚了我没有足够的咖啡,要么已经晚了我喝了太多咖啡。

非常感谢,

1 个答案:

答案 0 :(得分:1)

  

似乎tempdata2中的数据正在改变,尽管没有引用它。

Home.data引用的任何更改也会影响两个临时数组的引用。所以,那些都不是副本,那些都指向内存中的同一个数组。

至于交换数字,问题是你分配a=b,然后尝试分配b=a(因为引用是相同的)。结果是b=b

的noop

您也可以使用一个循环进行交换

    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;
    }