目前在 RObocode 中,我有一个哈希表,其中名称作为键,point2D 对象作为值。这些对象的属性之一是双 lastSeen,它是自看到机器人以来的时间。每次扫描机器人时,我都会将此值设置为 0,这个值也有助于我的雷达成为最古老的扫描雷达。
public void onScannedRobot(ScannedRobotEvent e) {
String name;
EnemyInfo enemy = (EnemyInfo) enemies.get(name = e.getName());
// if the enemy is not already on the hashtable, puts it on
if (enemy == null) {
enemies.put(name, enemy = new EnemyInfo());
}
enemy.bearing = e.getBearing();
enemy.velocity = e.getVelocity();
enemy.heading = e.getHeading();
enemy.energy = e.getEnergy();
enemy.lastSeen = 0;
上面的代码在扫描机器人时,将其作为对象推入哈希表,并将对象的 lastseen 属性设置为 0;
我创建了一个方法,通过返回所有对象的 lastSeen 变量的枚举并向每个对象添加一个来增加每个对象的 lastSeen 变量的值(加 1)。方法如下:
public static void advanceTime(EnemyInfo e) {
if (!enemies.isEmpty()) {
int i = 0;
Enumeration enum3 = enemies.elements();
do {
(e = (EnemyInfo) enum3.nextElement()).lastSeen = (e = (EnemyInfo) enum3
.nextElement()).lastSeen + 1;
i++;
System.out.println("Added one to.." + i);
} while (enum3.hasMoreElements());
}
}
但是,如果哈希表中没有任何内容,我无法调用此方法,这就是为什么如果哈希表中没有任何内容,我会设置一个 if 来阻止该方法执行。不知道这是什么原因。。
还有其他方法可以有效地做到这一点吗?