Java 为什么变量在do while循环中发生变化?

Java 为什么变量在do while循环中发生变化?,java,do-while,Java,Do While,我试图在do while循环中使用上一次迭代中的变量在当前迭代中进行计算,然后在循环结束时使用它进行收敛测试 下面是代码(java): intz=0; 做{ T0=T2; 对于(int j=0;j=0;i--){ 如果(i==0){ T1[i][j]=T0[i+1][j]+C[i];//当x=0时,C=0 } 如果(i>0&&i0&&j

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

下面是代码(java):

intz=0;
做{
T0=T2;
对于(int j=0;j=0;i--){
如果(i==0){
T1[i][j]=T0[i+1][j]+C[i];//当x=0时,C=0
}
如果(i>0&&i=0;j--){
如果(j==0){
T2[i][j]=T1[i][j+1]+C[j];//当y=0时,C=0
}
如果(j>0&&j
我试图在循环开始时将上一次迭代的T0=T2设置为T0,然后将T0与循环结束时当前迭代的T2进行比较,以进行收敛测试(此处不包括)。在循环开始时,T0实际上等于上一次迭代的T2。然而,在循环结束时,T0等于当前迭代的T2。 那么,如何在迭代中防止T0从循环的开始到结束发生变化呢? 我是java新手,非常感谢您的帮助/评论

更新: 感谢您的快速反馈。System.arraycopy()和array.clone()似乎都能为1D阵列完成这项工作。我可能遗漏了一些东西,但复制2D矩阵似乎更具挑战性?但就我而言,这也起了作用:

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

for(inti=0;i当您为T2赋值时,您似乎同时在T0和T2上书写。
这是因为T0指向相同的数组/矩阵,然后是T2


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

如何声明
T0
T2
在Java中,您不能仅仅通过赋值来复制整个数组:
T0=T2
。这只是将对数组的引用复制到另一个变量。因此,当您更改
T0
的数据时,您正在更改
T2
的数据。您需要进行真正的复制。作为参考,您可以例如,请参阅。只需搜索“Java中的复制数组”.Hi.请尽可能多地从代码中删除。我们在此表示感谢。您的代码中有几十个变量。我们如何知道您在说什么?我对这个问题投了反对票,因为似乎没有人试图调试这个问题。请尝试一步一步地解决这个问题,或者在您的co中添加打印语句de来显示变量在每个点上所包含的内容,使用调试器逐部分跟踪程序,甚至只是跟踪纸面上的逻辑。看看什么时候事情发生了与预期不同的变化,当你发现时,问一个特定的问题,比如“为什么,当我更改T0[2]时T2[2]会同时更改?”(尽管这个答案可以在任何java教程或许多现有的SO问题中找到)
        for (int i=0; i<N;i++) {
            for (int j=0; j<K;j++) {
                T0[i][j]=T2[i][j];
            }
        }