Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-修改复制的数组也会影响原始数组_Java_Arrays - Fatal编程技术网

Java-修改复制的数组也会影响原始数组

Java-修改复制的数组也会影响原始数组,java,arrays,Java,Arrays,我正在复制一个数组并修改第二个数组。为什么这也会修改我复制它的原始数组。该代码在给定的维度长度(X)范围内创建一个随机双精度数组。然后,数组被复制到Y。Y中的第j个元素增加2.2,Y被发送到schwefel基准函数,该函数返回一个双精度值。X之前、Y之前和X之后都应该是相同的值,因为X没有改变。相反,Y之后和X之后都是新值。以下是导致此问题的代码: double alpha = 2.2; X = createArray(rangeMin, rangeMax, dimension)

我正在复制一个数组并修改第二个数组。为什么这也会修改我复制它的原始数组。该代码在给定的维度长度(X)范围内创建一个随机双精度数组。然后,数组被复制到Y。Y中的第j个元素增加2.2,Y被发送到schwefel基准函数,该函数返回一个双精度值。X之前、Y之前和X之后都应该是相同的值,因为X没有改变。相反,Y之后和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;
            }
        }

您没有复制数组,因为有两个引用指向同一个数组:引用
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
            }
        }
double alpha=2.2;
X=createArray(rangeMin、rangeMax、dimension);
double[]Y=X.clone();
对于(int i=0;i
您没有复制数组,您有两个引用指向同一数组,即引用
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
            }
        }
double alpha=2.2;
X=createArray(rangeMin、rangeMax、dimension);
double[]Y=X.clone();
对于(int i=0;i