- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个汽车数组列表,我想循环遍历这个数组列表,看看两辆车是否处于完全相同的位置,这样我就可以看看它们是否发生了碰撞。我写了以下内容,但我得到的只是“没有碰撞”,即使它们发生了碰撞。我用两种方法来实现。我的假设是,由于两个循环都从同一点循环,它们是否只是不断地一起检查同一辆车或类似的东西?那么 if (i != collided) 每次都会被触发?如果是这样我该如何阻止?
public void carCollision(Car collided) {
for (Car i: cars) {
if(i != collided && i.getLane() == collided.getLane() &&
i.getPosition() == collided.getPosition()) {
System.out.println("collision");
} else {
System.out.println("no collisions");
}
}
}
public void check() {
for (Car a: cars) {
carCollision(a);
}
}
汽车类别 -
/** State of a car on the road */
public class Car {
/** Position of this car on the road (i.e. how far down the road it is) in pixels */
private double position;
/** Current speed in pixels per second */
private double speed;
/** Lane that this car is on */
private int lane;
/** Colour of this car's display */
private Color color;
public Car(double position, double speed, int lane, Color color) {
this.position = position;
this.speed = speed;
this.lane = lane;
this.color = color;
}
/** @return a new Car object with the same state as this one */
public Car clone() {
return new Car(position, speed, lane, color);
}
/** Update this car after `elapsed' seconds have passed */
public void tick(Environment environment, double elapsed) {
position += speed * elapsed;
}
public double getPosition() {
return position;
}
public int getLane() {
return lane;
}
public Color getColor() {
return color;
}
这是我的主类,用于展示我如何调用该方法,我使用 e.check();在 addcars 方法中 -
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage stage) {
final Environment environment = new Environment();
final Display display = new Display(environment);
environment.setDisplay(display);
VBox box = new VBox();
stage.setTitle("Traffic");
stage.setScene(new Scene(box, 800, 600));
HBox controls = new HBox();
Button restart = new Button("Restart");
controls.getChildren().addAll(restart);
box.getChildren().add(controls);
restart.setOnMouseClicked(e -> {
environment.clear();
display.reset();
addCars(environment);
});
box.getChildren().add(display);
addCars(environment);
stage.show();
}
/** Add the required cars to an environment.
* @param e Environment to use.
*/
private static void addCars(Environment e) {
/* Add an `interesting' set of cars */
Random r = new Random();
e.add(new Car( 0, 63, 2, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car( 48, 79, 0, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car(144, 60, 0, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car(192, 74, 0, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car(240, 12, 1, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car(288, 77, 0, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car(336, 28, 1, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car(384, 32, 2, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.add(new Car(432, 16, 1, new Color(r.nextFloat(), r.nextFloat(), r.nextFloat(), 1.0)));
e.check();
}
};
更新以包括我的环境类,现在问题很啰嗦,但我觉得问题可能出在我如何使用环境类?
public class Environment implements Cloneable {
/** All the cars that are on our road */
private ArrayList<Car> cars = new ArrayList<Car>();
/** The Display object that we are working with */
private Display display;
/** Number of lanes to have on the road */
private int lanes = 4;
private long last;
/** Set the Display object that we are working with.
*/
public void setDisplay(Display display) {
this.display = display;
/* Start a timer to update things */
new AnimationTimer() {
public void handle(long now) {
if (last == 0) {
last = now;
}
/* Update the model */
tick((now - last) * 1e-9);
/* Update the view */
double furthest = 0;
for (Car i: cars) {
if (i.getPosition() > furthest) {
furthest = i.getPosition();
}
}
display.setEnd((int) furthest);
display.draw();
last = now;
}
}.start();
}
/** Return a copy of this environment */
public Environment clone() {
Environment c = new Environment();
for (Car i: cars) {
c.cars.add(i.clone());
}
return c;
}
/** Draw the current state of the environment on our display */
public void draw() {
for (Car i: cars) {
display.car((int) i.getPosition(), i.getLane(), i.getColor());
}
}
/** Add a car to the environment.
* @param car Car to add.
*/
public void add(Car car) {
cars.add(car);
}
public void clear() {
cars.clear();
}
/** @return length of each car (in pixels) */
public double carLength() {
return 40;
}
/** Update the state of the environment after some short time has passed */
private void tick(double elapsed) {
Environment before = Environment.this.clone();
for (Car i: cars) {
i.tick(before, elapsed);
}
}
/** @param behind A car.
* @return The next car in front of @ref behind in the same lane, or null if there is nothing in front on the same lane.
*/
public Car nextCar(Car behind) {
Car closest = null;
for (Car i: cars) {
if (i != behind && i.getLane() == behind.getLane() && i.getPosition() > behind.getPosition() && (closest == null || i.getPosition() < closest.getPosition())) {
closest = i;
}
}
return closest;
}
public void carCollision(Car collided) {
for (Car i: cars) {
double MIN_DIS = 0.1;
if(!(i.equals(collided)) && i.getLane() == collided.getLane() &&
(Math.abs(i.getPosition() - collided.getPosition()) < MIN_DIS )) {
System.out.println("collision");
} else {
System.out.println("no collisions");
}
}
}
public void check() {
for (Car a: cars) {
carCollision(a);
}
}
public void speed() {
for (Car a : cars) {
a.setSpeed();
}
}
/** @return Number of lanes */
public int getLanes() {
return lanes;
}
}
更新 - 尚未修复,但我认为我已经接近了。我使用“nextCar”方法添加了以下代码 -
public Car nextCar(Car behind) {
Car closest = null;
for (Car i: cars) {
if (i != behind && i.getLane() == behind.getLane() && i.getPosition() > behind.getPosition() && (closest == null || i.getPosition() < closest.getPosition())) {
closest = i;
}
}
return closest;
}
public void collision() {
Environment e = Environment.this.clone();
double MIN_DIS = 0.5;
for (Car i : cars) {
e.nextCar(i);
for (Car a : cars) {
if(!(i.equals(a)) && i.getLane() == a.getLane() &&
(Math.abs(i.getPosition() - a.getPosition()) < MIN_DIS)) {
System.out.println("collision");
} else {
System.out.println("no collision");
}
System.out.println("closest car is" + i);
}
}
}
这设法打印出最近的汽车,所以我知道它有点工作,尽管它仍然不会检测到碰撞?知道可能是什么问题吗?我在 main 的 addCars 方法中使用 e.collision() 来调用它
最佳答案
您是否对 cars
中的每辆车调用 check()
?您发布的代码未显示您如何使用 check()
。
此外,你还写了
two cars are in the exact same position
但必须提醒您,使用浮点位置,这确实很棘手。如果两辆车具有相同的初始位置、速度,并且使用相同的 elapsed
参数调用它们的 tick
,那么它们将具有相同的位置
。但是,在任何其他情况下,由于舍入误差,它们的位置可能会相差很小的分数,例如 0.00000000001
。
您必须向我们展示一个包含一组汽车的完整示例,以及如何在它们上调用 check()
。
关于java - 如何循环遍历数组列表以查看是否有任何对象具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170987/
这是代码片段。 请说出这种用小内存存储大数据的算法是什么。 public static void main(String[] args) { long longValue = 21474836
所以我使用 imap 从 gmail 和 outlook 接收电子邮件。 Gmail 像这样编码 =?UTF-8?B?UmU6IM69zq3OvyDOtc68zrHOuc67IG5ldyBlbWFpb
很久以前就学会了 C 代码;想用 Scheme 尝试一些新的和不同的东西。我正在尝试制作一个接受两个参数并返回两者中较大者的过程,例如 (define (larger x y) (if (> x
Azure 恢复服务保管库有两个备份配置选项 - LRS 与 GRS 这是一个有关 Azure 恢复服务保管库的问题。 当其驻留区域发生故障时,如何处理启用异地冗余的恢复服务保管库?如果未为恢复服务启
说,我有以下实体: @Entity public class A { @Id @GeneratedValue private Long id; @Embedded private
我有下一个问题。 我有下一个标准: criteria.add(Restrictions.in("entity.otherEntity", getOtherEntitiesList())); 如果我的
如果这是任何类型的重复,我会提前申请,但我找不到任何可以解决我的具体问题的内容。 这是我的程序: import java.util.Random; public class CarnivalGame{
我目前正在使用golang创建一个聚合管道,在其中使用“$ or”运算符查询文档。 结果是一堆需要分组的未分组文档,这样我就可以进入下一阶段,找到两个数据集之间的交集。 然后将其用于在单独的集合中进行
是否可以在正则表达式中创建 OR 条件。 我正在尝试查找包含此类模式的文件名列表的匹配项 第一个案例 xxxxx-hello.file 或者案例二 xxxx-hello-unasigned.file
该程序只是在用户输入行数时创建菱形的形状,因此它有 6 个 for 循环; 3 个循环创建第一个三角形,3 个循环创建另一个三角形,通过这 2 个三角形和 6 个循环,我们得到了一个菱形,这是整个程序
我有一个像这样的查询字符串 www.google.com?Department=Education & Finance&Department=Health 我有这些 li 标签,它们的查询字符串是这样
我有一个带有静态构造函数的类,我用它来读取 app.config 值。如何使用不同的配置值对类进行单元测试。我正在考虑在不同的应用程序域中运行每个测试,这样我就可以为每个测试执行静态构造函数 - 但我
我正在寻找一个可以容纳多个键的容器,如果我为其中一个键值输入保留值(例如 0),它会被视为“或”搜索。 map, int > myContainer; myContainer.insert(make_
我正在为 Web 应用程序创建数据库,并正在寻找一些建议来对可能具有多种类型的单个实体进行建模,每种类型具有不同的属性。 作为示例,假设我想为“数据源”对象创建一个关系模型。所有数据源都会有一些共享属
(1) =>CREATE TABLE T1(id BIGSERIAL PRIMARY KEY, name TEXT); CREATE TABLE (2) =>INSERT INTO T1 (name)
我不确定在使用别名时如何解决不明确的列引用。 假设有两个表,a 和 b,它们都有一个 name 列。如果我加入这两个表并为结果添加别名,我不知道如何为这两个表引用 name 列。我已经尝试了一些变体,
我的查询是: select * from table where id IN (1,5,4,3,2) 我想要的与这个顺序完全相同,不是从1...5,而是从1,5,4,3,2。我怎样才能做到这一点? 最
我正在使用 C# 代码执行动态生成的 MySQL 查询。抛出异常: CREATE TABLE dump ("@employee_OID" VARCHAR(50)); "{"You have an er
我有日期 2016-03-30T23:59:59.000000+0000。我可以知道它的格式是什么吗?因为如果我使用 yyyy-MM-dd'T'HH:mm:ss.SSS,它会抛出异常 最佳答案 Sim
我有一个示例模式,它的 SQL Fiddle 如下: http://sqlfiddle.com/#!2/6816b/2 这个 fiddle 只是根据 where 子句中的条件查询示例数据库,如下所示:
我是一名优秀的程序员,十分优秀!