我目前正在编写一些代码,这些代码可以生成新的解决方案并替换数组列表中的旧解决方案。
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]
答案 0 :(得分:1)
您的问题是您的sequence
类中的这一行:this.input = toCopy.input;
您正在重用数组引用,而不是复制它。有关复制数组的一些解决方案,请参见this问题-Arrays.copyOf()
或System.arrayCopy()
side nit:编码时请遵循约定,例如将类名的首字母大写;它使其他人更容易了解