ArrayList对象被最新迭代覆盖

时间:2018-07-15 21:22:43

标签: java arrays oop arraylist

我目前正在编写一些代码,这些代码可以生成新的解决方案并替换数组列表中的旧解决方案。

requirements:
  host:
    - abc
    - 'def   # [something]'

sequence是一个类,其中包含一个称为input的2d数组变量,该变量包含一个特定的序列及其属性。 alfa是序列类的实例。 因此,我通过使用GenNewSol改组序列来生成基于alfa的3个解决方案,并打印出该序列(一个示例):

public static void main(String args[])
{
    ArrayList<sequence> solutions = new ArrayList<sequence>();
    int a = 10;
    sequence alfa = new sequence();
    alfa.GenNewSol(a);
    sequence A = new sequence();
    A.GenNewSol(a);
    sequence B = new sequence();
    A.GenNewSol(a);
    sequence C = new sequence();
    A.GenNewSol(a);
    solutions.add(A);
    solutions.add(B);
    solutions.add(C);
    for(int i = 0 ;i < 3;i++) // Generate 3 new solutions based on alfa
    {
       sequence temp = new sequence(alfa);    
       temp.GenNewSol(a);
       solutions.set(i, temp);  
       System.out.print("Temp:" + i);
       System.out.println(Arrays.deepToString(temp.getSequence()));
    }
    System.out.println(Arrays.deepToString(solutions.get(0).getSequence()));
    System.out.println(Arrays.deepToString(solutions.get(1).getSequence()));
    System.out.println(Arrays.deepToString(solutions.get(2).getSequence()));
}

但是,在循环之后它将打印出来:

Temp:0[[0.0, 3.0, 8.0, 9.0, 5.0, 2.0, 7.0, 4.0, 6.0, 1.0]
Temp:1[[1.0, 0.0, 8.0, 9.0, 2.0, 5.0, 7.0, 6.0, 3.0, 4.0]
Temp:2[[3.0, 4.0, 5.0, 9.0, 2.0, 8.0, 1.0, 6.0, 7.0, 0.0]

当我希望它显示那些初始结果时,好像所有循环的值都已被上次迭代替换。

如何解决此问题?这与对象引用有关吗?

[[3.0, 4.0, 5.0, 9.0, 2.0, 8.0, 1.0, 6.0, 7.0, 0.0]
[[3.0, 4.0, 5.0, 9.0, 2.0, 8.0, 1.0, 6.0, 7.0, 0.0]
[[3.0, 4.0, 5.0, 9.0, 2.0, 8.0, 1.0, 6.0, 7.0, 0.0]

1 个答案:

答案 0 :(得分:1)

您的问题是您的sequence类中的这一行:this.input = toCopy.input;

您正在重用数组引用,而不是复制它。有关复制数组的一些解决方案,请参见this问题-Arrays.copyOf()System.arrayCopy()

side nit:编码时请遵循约定,例如将类名的首字母大写;它使其他人更容易了解