Integer addieren - Wo ist der Fehler?

Status
Nicht offen für weitere Antworten.

oldshoe

Bekanntes Mitglied
Hallo Freunde der Programmierkunst...ich finde den Fehler einfach nicht! Folgende Funktion soll mir die Anzahl von Links zählen. Dazu habe ich eine HashMap namens LinksAndRate mit Key Linkname (String) und Value rate (Integer) definiert.
Doch irgendwie bekomme ich immer nur 1 als rate, wenn ich mir die Map ausgeben lasse!? Was mach ich falsch?

Code:
public void ratingLinks(String linkName) {

		if (!LinksAndRate.containsKey(linkName)) {
			Integer rate = new Integer(1);
			LinksAndRate.put(linkName, rate);
		} else {
			Integer rate = (Integer) LinksAndRate.get(linkName);
			int rateToInt = rate.intValue();
			rateToInt = rateToInt++;
			rate = new Integer(rateToInt);
			LinksAndRate.put(spaceKey, rate);
		}
	}
 
rateToInt = rateToInt++;

ist leider üble Java-Semantik, der Variable links wird der Wert der Variablen rechts zugewiesen, bevor das ++ greift,
warum auch immer, ist in manchen Zählsituationen vielleicht gut
int index = 0;
String a = array[index++]; // a = array[0]
String b = array[index++]; // b = array[1]
// index = 2


funktionierende Varianten:
rateToInt = ++rateToInt;
rateToInt = rateToInt+1;
rateToInt++;

edit:
und gerade bei kleinen Zahlen bietet sich Integer.valueOf(int) an statt new Integer()
 
Zuletzt bearbeitet von einem Moderator:
>> rateToInt = rateToInt++;

Oh je ...

Probiers mal mit

rateToInt++; // muss nicht nochmal zugewiesen werden

>> LinksAndRate.put(spaceKey, rate);

Okay, du hast nun die "rate" inkrementiert, aber irgendwie scheinst du einen anderen "key" zu verwenden. Hätte hier 'linkName' und nicht 'spaceKey' erwartet.

- Alex
 
ohja super mit rateToInt++ funktioniert's...

ja spacekey = linkname...(hab das hier nur linkname genannt um den sinn verständlicher zu machen)


vielen Dank...:toll:
 
- Variablennamen klein schreiben
- HashMap ordentlich typisieren (falls du Java >= 1.5 hast), also Map linksAndRate<String, Integer> = new HashMap<string, Integer>();
Damit spart du dir die casts.
 
nee leider in diesem fall noch keine generics möglich....variablennamen sind doch klein...oder meinst du die großbuchstaben innerhalb des names?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben