首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Robocode HashTable/方法修改it中的值

Robocode HashTable/方法修改it中的值
EN

Stack Overflow用户
提问于 2015-11-19 05:00:34
回答 1查看 154关注 0票数 0

目前,在RObocode中,我有一个哈希表,名称作为键,point2D对象作为值。这些对象的特性之一是双lastSeen,这是自机器人被看到以来的时间。每次我扫描一个机器人,我都会把这个值设置为0,这个值也帮助我的雷达成为最古老的扫描雷达。

代码语言:javascript
复制
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;

上面是这样的代码:在扫描机器人时,将其作为一个对象插入到哈希表中,并将该对象的最近看过的属性设置为0;

我创建了一个方法,通过返回所有对象的lastSeen变量的枚举并向每个变量中添加一个,从而增加每个对象的lastSeen变量的值( 1)。方法如下:

代码语言:javascript
复制
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来停止该方法的执行。不知道为什么..。

还有其他有效的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-13 22:15:29

存储计算值

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

机器人代码

回到眼前的问题上。不要存储一段信息的时间(年龄),而是在创建信息时(生日)进行存储。ScannedRobotEvent有一个getTime()方法,可以用来获取扫描事件的“生日”。把这个号码存起来。然后,如果您需要知道存储的ScannedRobotEvent有多老,从当前时间减去这个存储时间。这将绕过对advanceTime方法的需求。若要实现此更新enemy.lastSeen,请执行以下操作:

代码语言:javascript
复制
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是一个计算值,但要计算它,您需要访问每一门课程,有人已经上过。在这种情况下,如果可以更快地存储GPA,并记得更新它时,有人完成了新的课程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33795592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档