0

所以这里的难题是:

“kb”是一个扩展 java.util.Hashtable 的类的实例 键是一个字符串,存储的值是一个名为“IntelCard”的类

此代码提取键,并努力从表中打印数据

    Set<String> ks = kb.keySet();
    System.out.println(ks); // is this what we thought?
    for(String key: ks){
        IntelCard ic = kb.get(key);
        String o = String.format("%-24s %24s %8s", 
                          ic.name, ic.alliance, ic.might);
        System.out.println(o);
    }

这是输出:

[commanderv, repo, olaf, triguy]
triguy                                  galactica    10000
triguy                                  galactica    10000
triguy                                  galactica    10000
triguy                                  galactica    10000

我们可以看到“ks”的转储,它应该是一组键。但显然它只选择哈希表中的最后一个“触摸”条目。(在此测试中,“triguy”是最后添加的值。)

是否需要以某种方式重置 Hashtable 选择器?这没有意义,因为代码通过键选择每个值。是否需要重置键集(ks)上的选择器?这也没有任何意义,因为循环应该简单地遍历整个集合。

我不知道,我错过了什么?

---v

4

2 回答 2

1

可能您将同一个IntelCard对象关联到多个键;确保您正在遍历所有键,使用String.format(key, ic.alliance, ic.might). 使用而不是使用对
迭代地图:Map.Entry<K,V>keySet()/get()

for(final Map.Entry<String,IntelCard> e : kb.entrySet()) {
  IntelCard ic = e.getValue();
  String o = String.format("%-24s %24s %8s", ic.name, ic.alliance, ic.might);
  System.out.println(o);
}
于 2013-09-09T06:14:31.597 回答
1

显然,您添加了 4 个类似(相同的 toString() 字段)具有不同键的 IntelCard。Hashtable 有唯一的键,不一定是唯一的值。

于 2013-09-09T06:19:05.273 回答