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++;
}
}
}
}
}
}