我试图在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];
}
}
答案 0 :(得分:0)
当您为T2指定值时,似乎您正在T0和T2上写入。 这是由于T0指向相同的阵列/矩阵然后T2。
你应该对数组进行深度复制而不是进行赋值。尝试使用array.clone(),它应该创建一个基元数组的深层副本(如T0和T2所示)。