以下代码在整个循环中运行一次,但是在第二遍中,即使没有引用它,theEquation的数据也已更改。

String[] theEquation = breakdown(theequation);
double[] yValues = new double[400];

for(int i=0; i < bitmapx; i++){
    Double v = xmin + (xstep * i);
    yValues[i] = Double.parseDouble( solveArrayX( theEquation , v ) );
}


例如,第一次通过for循环,theEquation将具有{ "x", "^", "2" }。下一次将是{ previousCalculatedAnswer, null, null }

为什么要更改theEquation?没有其他代码引用它。

最佳答案

为何更改方程式?


theEquation不包含数组,它包含对数组的引用。

当您执行solveArrayX( theEquation , v )时,会将此引用传递给更改数组的solveArrayX方法。参见lines 120 and 121

public String solveArrayX(String[] tA, double d){
    ...

        tA[i] = tA[i+2];
        tA[i+2] = "";
    ...
}


如果要避免这种情况,可以使用Arrays.copyOf(theEquation, theEquation.length)作为方法的参数。

10-05 23:58