2009-10-28 63 views
1

我有一个HashMap,我正在处理中使用,我想增加地图中的值。我Google'd它,它给我下面的代码是正确的:HashMap和递增值处理

if (colors.containsKey(ckey)) 
{ 
    colors.put(ckey, colors.get(ckey) + 1); 
} else { 
    colors.put(ckey, 1); 
} 

我不断收到:

运营商+未定义的参数类型对象,诠释

我不是Java编码器,但引用说它返回一个对象...我必须使用它的.getValue()方法来提取int吗?

也许我在做别的事情吗?嗯。

问候。

回答

0

我对“处理”一无所知,但在查看上面的代码时,您需要在添加之前将值转换为整数。

不知道在这里使用的是什么版本的Java,但你可以做这样的事情。

if (colors.containsKey(ckey)) 
{ 

    int val = ((Integer) colors.get(ckey)).intValue(); 
    colors.put(ckey, new Integer(val + 1); 
} 
else 
{ 
    colors.put(ckey, 1); 
} 
+0

啊我是类型铸造与(整数)在前面,但我没有使用intValue()方法。乙酰胆碱。谢谢! – David 2009-10-28 13:00:26

+1

小心转换无类型的对象,因为您可能会生成ClassCastException。如果这是一个可接受的风险,这将工作正常。 – jheddings 2009-10-28 20:05:49

+0

不幸的是'Integer'类型在processing.org中可用,但不能在processingjs.org中使用。 – 2012-09-16 21:13:20

2

默认情况下,HashMap中会让你存储任何类型的对象,而不检查对象的类型被用于任何键或值。

你应该尝试使用地图的类型安全的声明,声明你的HashMap:

HashMap<Color, Integer> colors = new HashMap<Color, Integer>(); 

(请注意,我假设为地图键是java.awt.Color中和值始终int)

+3

它必须是整数。泛型中不能使用原始类型。 – amit 2009-10-28 04:19:52

+0

谢谢......我输入的速度比我的大脑编译速度快。 – jheddings 2009-10-28 04:24:06