为什么将值分配给数组中的特定位置,将同一值分配给同一数组中的其他随机位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么将值分配给数组中的特定位置,将同一值分配给同一数组中的其他随机位置?相关的知识,希望对你有一定的参考价值。
我有问题,对我来说就像魔术,以前我从来没有这样的事情...
我的程序中有一个方法可以获取这个二维数组中的每个元素,并计算与八个邻居的战斗所产生的支出(总和)
public void countSum () {
if (itIsWideArray) {
for (int i=1; i<this.temporary.length-1; i++) {
for(int j=1; j<this.temporary[i].length-1; j++){
if (!this.temporary[i][j].cellEmpty) {
this.temporary[i][j].sumPerRound=0;
double counterSum=0;
double notEmptyNeighbours=0;
for (int k=i-1; k<i+2; k++) {
for (int l=j-1; l<j+2; l++) {
if (!(k==i && l==j) && !this.temporary[k][l].cellEmpty) {
notEmptyNeighbours++;
if(this.temporary[i][j].sharingPayout && this.temporary[k][l].sharingPayout) {
counterSum+=(pD.confrontation(this.temporary[i][j].state, this.temporary[k][l].state)/2);
counterSum+=(pD.confrontation(this.temporary[k][l].state, this.temporary[i][j].state)/2);
} else {
System.out.println(this.temporary[i][j].state + " -> " + this.temporary[k][l].state);
counterSum+=pD.confrontation(this.temporary[i][j].state, this.temporary[k][l].state);
System.out.println(counterSum);
}
}
}
}
}
System.out.println(i + " " + j + " " + (this.temporary[i][j].sum));
this.temporary[i][j].sum=counterSum;
System.out.println(i + " " + j + " " + (this.temporary[i][j].sum));
this.temporary[i][j].sumPerRound+=counterSum;
}
}
}
}
}
无论如何,我的流给我带来了很好的战斗结果,我自己计算了它,即使系统输出println也获得了很好的结果,但是当我调试该程序时,在此行this.temporary[i][j].sum=counterSum;
立即将值分配给其他变量数组...我不知道发生了什么,我正在尝试将值分配给数组中的特定索引...我在想,也许这是空间问题,但是在我使用它后,它的简单7x7数组3倍变得疯狂...
答案
我注意到temporary
是一个对象数组。也许您对数组中的同一对象有多个引用。当您更改由this.temporary[i][j]
引用的对象的状态时,该更改将由数组中的每个引用看到。您如何将内容放入temporary
?
此链接可能有用:http://www.informit.com/articles/article.aspx?p=174371&seqNum=4
以上是关于为什么将值分配给数组中的特定位置,将同一值分配给同一数组中的其他随机位置?的主要内容,如果未能解决你的问题,请参考以下文章