已知二维数组 W(0),W(1)。
求解W(n+1)=W(n)+a*(W(n)-W(n-1)).
.......
.......
W1=W;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
W[i][j]=W[i][j]+a*(W[i][j]-W0[i][j]);
}
}
W0=W1;
..........
我写了上述的代码,可结果怎么也不正确,好像是W0=W1出了问题,W0的新值不是原来W 赋予W1 的值,而是计算后新的W值。
本人学Java时间还不长,现急着要用Java作一个数学模型,哪位高人了解,请予以指教,我非常感激!!
数组本身是一个特殊的对象,而java里的对象都是引用赋值。
所以,W0 = W1 是让W0成了W1数组的引用,原来的W0数组啥的都变。此时对新的W0做操作,同时也就改变了W1(因为它们此时是同一个东西的引用)。
要想把W1中的值赋给W0,写循环一个一个赋值。
建议代码:
[code="java"]
int MAX; // 表示最大的n,记得给个值。
int SIZE; // 表示矩阵的大小,记得给个值。
// ...
// 用三维数组,W[0]就是第一个矩阵,W[1]就是第二个。。。
int[][][] W = new int[][][MAX];
for (int k = 0; k < MAX; k++) {
W[k] = new int[SIZE][SIZE];
if (k == 0) {
// 在这里给W[0]初值
// ...
} else if (k == 1) {
// 在这里给W[1]初值
// ...
}
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
// 在这里实现你的递推公式
W[k][i][j] = W[k - 1][i][j]
+ a * (W[k - 1][i][j] - W[k - 2][i][j]);
}
}
}
[/code]
恩,LS回答的正确,是引用造成的。至于数组拷贝,可以考虑使用Arrays类的copyOf方法。