为什么do-while循环中的变量会发生变化?

时间:2017-11-12 20:38:23

标签: java do-while

我试图在do-while循环中使用前一次迭代中的变量来在当前迭代中进行计算,然后在循环结束时将其用于收敛测试。

这是代码(java):

    int z = 0;
    do {

        T0 = T2;

        for (int j = 0; j < K; j++) {
            for (int i = N - 1; i >= 0; i--) {
                if (i == 0) {
                    T1[i][j] = T0[i + 1][j] + C[i]; // When x=0, c=0
                }
                if (i > 0 && i < N - 1) {
                    T1[i][j] = T0[i + 1][j] + T0[i - 1][j]
                            + C[i];
                }
                if (i == N - 1) {
                    T1[i][j] =  T0[i - 1][j] + C[i]; // When x=W, b=0
                }

            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = K - 1; j >= 0; j--) {
                if (j == 0) {
                    T2[i][j] = T1[i][j + 1] + C[j]; // When y=0, c=0
                }
                if (j > 0 && j < K - 1) {
                    T2[i][j] = T1[i][j + 1] + T1[i][j - 1]
                            + C[j];
                }
                if (j == K - 1) {
                    T2[i][j] = 273.15;
                }

            }
        }

        z++;

    } while (z < 5);

我试图在循环开始时从上一次迭代设置T0 = T2,然后将T0与循环结束时当前迭代的T2进行比较以进行收敛测试(此处不包括) 。在循环开始时,T0实际上等于前一次迭代的T2。然而,在循环结束时,T0等于当前迭代的T2。 那么如何让T0在迭代中保持从循环的开始到结束的变化? 我是java的新手,非常感谢任何帮助/评论!

更新: 感谢您的快速反馈。 System.arraycopy()和array.clone()似乎都为一维数组做了工作。我可能会遗漏一些东西,但复制2D矩阵似乎更具挑战性?但就我的目的而言,这也有效:

        for (int i=0; i<N;i++) {
            for (int j=0; j<K;j++) {
                T0[i][j]=T2[i][j];
            }
        }

1 个答案:

答案 0 :(得分:0)

当您为T2指定值时,似乎您正在T0和T2上写入。 这是由于T0指向相同的阵列/矩阵然后T2。

你应该对数组进行深度复制而不是进行赋值。尝试使用array.clone(),它应该创建一个基元数组的深层副本(如T0和T2所示)。