为什么将值分配给数组中的特定位置,将同一值分配给同一数组中的其他随机位置?

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

以上是关于为什么将值分配给数组中的特定位置,将同一值分配给同一数组中的其他随机位置?的主要内容,如果未能解决你的问题,请参考以下文章

增强的 for 循环不适用于将值分配给数组(Java)[重复]

使用单个昏暗数组将值分配给两个昏暗数组

将字符串中的值分配给变量数组

将值分配给二维数组时的垃圾值

无法将值类型“()”分配给字符串类型?

链表:将值分配给节点的下一部分时出现分段错误错误