【发布时间】:2019-01-17 05:55:18
【问题描述】:
我真的很难检测 Car 类的两个 Car 对象之间的碰撞。代码很长,所以很难包含所有内容。我已经包含了我的碰撞方法。如果您能发现任何逻辑错误,我认为这是我的问题,那就太好了。如果您需要更多上下文,我曾问过一个较早的类似问题,其中包含更多代码 here,但我仍然没有解决方案..
我想要它做的是在两辆车接触时告诉我。它所做的只是在发生碰撞时打印“无碰撞”。
碰撞方法(环境类内部)-
public boolean collision() {
double MIN_DIS = 0.1;
for (Car a : cars) {
for (Car b : cars) {
if (!(a.equals(b)) && (Math.abs(a.getPosition() - b.getPosition()) < MIN_DIS)) {
return true;
}
}
}
return false;
}
调用方法(在我添加汽车的主要内部)-
if(e.collision() == true) {
System.out.println("collision");
} else {
System.out.println("no collision");
}
Equals 方法(我决定暂时使用 !(a == b))-
public boolean equals(Object obj) {
if (obj instanceof Car){
Car car = (Car) obj;
return car.getPosition() == this.position && car.getLane() == this.lane && car.getColor().equals(this.color) && car.getSpeed() == this.speed;
}
return false;
}
【问题讨论】:
-
getPosition返回什么?双人间? -
Car只是一个点吗?您确定它们实际上正在碰撞,它们在哪里/在您预期碰撞时它们的位置是什么?添加大量日志记录。 -
@StalemateOfTuning 是的,它返回一个双倍
-
另外,您是否在
Car中实现了自己的equals?只是想缩小范围 -
汽车的长度可能是 40,但我没有看到任何地方都包含在碰撞逻辑中。看起来位置需要在任何长度单位的 0.1 内完全相等。
标签: java for-loop math methods collision-detection