如何使嵌套的for循环不会增加for循环内动作的频率

时间:2018-11-28 14:35:51

标签: java loops

我目前正在使用嵌套的for循环来查看两个矩形是否相交。

for(int i = 0; i < enemies.size(); i++) {
    for(int j = 0; j < enemies.size(); j++) {
        if(!enemies.get(i).pureHitbox.intersects(enemies.get(j).pureHitbox) && i != j) {
            enemies.get(i).action();
        }
    }
}

问题是,对象的动作确实增加了ArrayList中对象的数量。当前的动作是向任意方向移动3,但是如果ArrayList中有2,它将移动6,如果有3,则将移动9,依此类推。

我想不出任何办法来有效地完成这项工作。

2 个答案:

答案 0 :(得分:1)

您的问题是当您搜索交叉点时,例如A和B具有交集,则您执行两次操作( A与B 相交,而 B与A 相交)。您所需要的只是检查是否对给定的A和B执行了给定的动作。

for(int i = 0, total = enemies.size(); i < total - 1; i++)
    for(int j = i + 1; j < total; j++)
        if(!enemies.get(i).pureHitbox.intersects(enemies.get(j).pureHitbox))
            enemies.get(i).action();

答案 1 :(得分:0)

所以,我知道了。这很简单,我要做的就是在移动一次之后再休息一下。