2009-10-28 7 views
1

J'ai une HashMap que j'utilise dans Processing et j'aimerais incrémenter la valeur dans la carte. Je Google'd et il m'a montré que le code suivant est correct:HashMap et incrémentation des valeurs dans Processing

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

Je continue à obtenir:

L'opérateur + est définie pour le type d'argument (s) objet, int

Je ne suis pas un codeur Java mais la référence dit qu'il renvoie un objet ... dois-je utiliser une méthode .getValue() pour extraire l'int?

Peut-être que je fais quelque chose d'autre? Hmmm.

Cordialement.

Répondre

0

Je ne sais rien sur 'Processing' mais en regardant le code ci-dessus, vous devez typer la valeur dans un entier avant d'ajouter.

Vous ne savez pas quelle version de Java est utilisée ici, mais vous pouvez faire quelque chose comme ça.

if (colors.containsKey(ckey)) 
{ 

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

Ah j'étais type de le lancer avec le (Integer) en face mais je n'utilisais pas la méthode intValue(). Ach. Merci! – David

+1

Soyez prudent lors de la conversion de l'objet non typé, car vous pouvez générer une exception ClassCastException. Si c'est un risque acceptable, cela fonctionnera bien. – jheddings

+0

malheureusement le type 'Integer' est disponible dans processing.org, mais pas processingjs.org. –

2

Par défaut, le HashMap vous permet de stocker tout type d'objet sans vérifier le type d'objet utilisé soit pour des clés ou des valeurs.

Vous devriez essayer de déclarer votre HashMap en utilisant la déclaration de type sécurisé de votre carte:

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

(note que je suppose que les clés de la carte sont java.awt.Color et les valeurs sont toujours int)

+3

Il doit être Integer. Vous ne pouvez pas utiliser les types primitifs dans les génériques. – amit

+0

Merci ... Je tapais plus vite que mon cerveau ne compilait. – jheddings

Questions connexes