gpt4 book ai didi

java - Robocode HashTable/方法修改其中的值问题

转载 作者:行者123 更新时间:2023-12-01 10:52:14 26 4
gpt4 key购买 nike

目前在 RObocode 中,我有一个哈希表,其中名称作为键,point2D 对象作为值。这些对象的属性之一是 double 的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 变量的枚举并向每个对象添加 1 来增加每个对象的 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 来在哈希表中没有任何内容时停止该方法的执行。不知道这是什么原因..

还有其他方法可以高效且有效地做到这一点吗?

最佳答案

存储计算值

在很多情况下,存储计算值的信息比存储计算值本身更好。例如,不存储一个人的年龄(例如 20 岁),而是存储该人的生日(例如 5-5-95)。如果您存储某人的年龄,则必须每年更新它。如果您存储生日,则可以随时计算年龄。

机器人代码

回到当前的问题。不要存储信息的年龄(年龄),而是存储信息的创建时间(生日)。 ScannedRobotEvent 有一个 getTime() 方法,您可以使用它来获取扫描事件的“生日”。存储这个号码。然后,如果您需要知道存储的 ScannedRobotEvent 已有多久,请从当前时间中减去存储的时间。这将不需要 advanceTime 方法。要将此更新 enemy.lastSeen 实现为:

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 = e.getTime();

异常

在某些情况下,您想要存储计算值。 GPA 就是一个很好的例子。 GPA 是一个计算值,但要计算它,您需要访问某人所学的每门类(class)。在这种情况下,如果可以更快地存储 GPA,并记住在有人完成新类(class)时更新它。

关于java - Robocode HashTable/方法修改其中的值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33795592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com