我正在复制一个数组并修改第二个数组。这怎么也修改了我从中复制原始数组的方式。该代码在给定的尺寸长度(X)范围之间创建一个随机双精度数组。然后,将数组复制到Y。Y中的第j个元素增加2.2,并将Y发送到返回双精度值的schwefel基准函数。由于X不变,因此X之前,Y之前和X之后的值均应相同。相反,After Y和After X均为新值。这是导致此问题的代码:
double alpha = 2.2;
X = createArray(rangeMin, rangeMax, dimension);
double[] Y = new double[dimension];
for (int i = 0; i < iterations; i++) {
Y = X;
for (int j = 0; j < dimension; j++) {
System.out.println("Before Y: " + runFunc(Y);
System.out.println("Before X: " + runFunc(X);
Y[j] += alpha;
System.out.println("After Y: " + runFunc(Y);
System.out.println("After X: " + runFunc(X);
Y[j] -= alpha;
}
}
我的输出例如:
Before Y: 894.3066859121232
Before X: 894.3066859121232
After Y: 825.661569833059
After X: 825.661569833059
答案 0 :(得分:2)
您没有复制具有两个引用的数组,这些引用指向引用X
和Y
的同一数组。
如果您想复制而不反映原件,可以使用clone()
方法
double alpha = 2.2;
X = createArray(rangeMin, rangeMax, dimension);
double[] Y = X.clone();
for (int i = 0; i < iterations; i++) {
for (int j = 0; j < dimension; j++) {
// logic
}
}