【问题标题】:HashMap and incrementing values in ProcessingHashMap 和处理中的递增值
【发布时间】:2009-10-28 04:01:35
【问题描述】:

我有一个正在处理中使用的 HashMap,我想增加映射中的值。我用谷歌搜索了一下,它告诉我以下代码是正确的:

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

我不断得到:

运算符 + 未定义参数类型 Object, int

我不是 Java 编码员,但参考资料说它返回一个 Object...我必须在其上使用 .getValue() 方法来提取 int 吗?

也许我做错了什么?嗯。

问候。

【问题讨论】:

    标签: hashmap processing


    【解决方案1】:

    默认情况下,HashMap 将允许您存储任何类型的对象,而无需检查用于键或值的对象类型。

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

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

    (请注意,我假设地图的键是 java.awt.Color 并且值始终是 int)

    【讨论】:

    • 它必须是整数。您不能在泛型中使用原始类型。
    【解决方案2】:

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

    不确定这里使用的是什么版本的 Java,但您可以这样做。

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

    【讨论】:

    • 啊,我在前面使用 (Integer) 进行类型转换,但我没有使用 intValue() 方法。啊。谢谢!
    • 小心转换无类型对象,因为您可能会生成 ClassCastException。如果这是一个可接受的风险,这将正常工作。
    • 遗憾的是 Integer 类型在 processing.org 中可用,但在 processingjs.org 中不可用。
    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2013-12-04
    相关资源
    最近更新 更多