Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组中循环以比较对象属性而不复制_Java_Oop_Object - Fatal编程技术网

Java 在数组中循环以比较对象属性而不复制

Java 在数组中循环以比较对象属性而不复制,java,oop,object,Java,Oop,Object,我试图在网格上移动对象并计算战斗次数(当它们接触时),但每次我得到一次交互,它们都会计算两次。我明白原因,但想不出解决办法 代码: //移动所有对象 for(int i=0;i

我试图在网格上移动对象并计算战斗次数(当它们接触时),但每次我得到一次交互,它们都会计算两次。我明白原因,但想不出解决办法

代码:

//移动所有对象
for(int i=0;i
您可以创建循环属性,这可能不是最佳答案,但它可以确保您不会比较数组中的两个相同对象

代码: //循环属性 字符串LastFightObjectOne=“”,lastFightObjectTwo=“”

//移动所有对象
for(int i=0;i
您正在浏览整个列表,对于列表中的每个元素,您……再次浏览整个列表

不要这样做——如果你想让列表中的每一项都与列表中的每一项“相遇”,那么,好吧,想想第一个循环:第一个“斗士”将在你的循环中与自己相遇(j=0),然后与所有其他斗士相遇。你用一个if(第一个if)来消除“遇见你自己”选项

然后下一架战斗机(i=1)将从头开始:它将遇到第一架战斗机(j=0),重复我们已经看到的战斗,然后遇到它自己,然后遇到战场上的其他人


解决方案是不在“0”处开始内部循环,而是在你之后的下一架战斗机处开始:第二架战斗机应首先与第三架战斗机相遇(并跳过第一架战斗机和它本身)所以,
int j=i+1
,而不是
int j=0
,这就是你所需要的。然后你也可以完全消除“不要与自己战斗”这一行,因为这现在不可能发生。

比我的答案好得多。@rzwitserroot,如果我是2,那意味着从3开始,只比较元素3和4吗?因为可能是那个元素0和1可能在同一个位置,我需要对此进行说明。*j从3开始。您不需要这样做,因为您已经在前面的循环中比较了这两个元素。
        // Move all the objects
        for(int i = 0; i < objectArray.length; i++) {
            objectArray[i].move();
        }

        // Check to see if any of the objectsare touching
        for(int i = 0; i < objectArray.length; i++) {

            for(int j = 0; j < objectArray.length; j++) {

                if(objectArray[i] != objectArray[j]) {

                    if(objectArray[i].getX() == objectArray[j].getX() && objectArray[i].getY() == objectArray[j].getY()) {


                            System.out.println("FIGHT");
                            System.out.println("There is a fight between " + objectArray[i].getName() + " and " + objectArray[j].getName() + "." );

                            fights++;

                        }
                    }
                }
            }
        }
        // Move all the objects
        for(int i = 0; i < objectArray.length; i++) {
            objectArray[i].move();
        }

        // Check to see if any of the objects are touching
        for(int i = 0; i < objectArray.length; i++) {

            for(int j = 0; j < objectArray.length; j++) {

                if(objectArray[i] != objectArray[j]) {

                    if(objectArray[i].getX() == objectArray[j].getX() && objectArray[i].getY() == objectArray[j].getY()) {

                            if(!lastFightObejectOne.equal(objectArray[i].getName()) && (!lastFightObejectTwo.equal(objectArray[j].getName())) {
                            System.out.println("FIGHT");
                            System.out.println("There is a fight between " + objectArray[i].getName() + " and " + objectArray[j].getName() + "." );

                            lastFightObjectOne = objectArray[i].getName();
                            lastFightObectTwo = objectArray[j].getName();

                            fights++;
                            }
                        }
                    }
                }
            }
        }