在LinkedList中更改对象的麻烦

时间:2011-02-23 08:29:13

标签: java list

public static List<double[]> pc = new LinkedList();

public void fillTable1() {
    int index = getWorstI();
    double[] temp = pc.get(index);
    for(int n=0;n<4;n++)
    System.out.println( temp[n]);

    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
       (pc.get(i))[j]/=temp[j]; // values change only in object pc.get(1)!  O_o


    }
    for(int i=0;i<4;i++)
        Main.fillTheRow(table1, pc.get(i), i);

}

3 个答案:

答案 0 :(得分:0)

我强烈怀疑你的问题出在其他地方。我认为没有理由(pc.get(i))[j]/=temp[j];仅适用于i == 1。也许填充pc列表的方式或者您正在阅读它的方式存在问题。

答案 1 :(得分:0)

你确定问题存在吗?

尝试在修改之前和之后打印电脑,看看它是否包含您实际期望的电脑内容;

快速方便的方法:

public static void printList(List<double[]> list)
{
   for (double[] arr : list)
   {
      // import java.util.Arrays;
      System.out.println(Arrays.toString(arr));
   }
}

答案 2 :(得分:0)

假设只有pc.get(0)才能正确更改该值。

变量temp和pc.get(0)是对同一对象的引用。 因此“(pc.get(0))[j] / = temp [j]”的结果将全部为“1”。 因此,之后的所有计算变为(pc.get(i))[j] / 1。

更改如下,不作为参考。

double[] temp = new double[pc.get(index).length]; // new array
for(int n=0;n<4;n++) {
    temp[n] = pc.get(index)[n]; // copy content
    System.out.println(temp[n]);
}