# Debugger HashWert



## Paddel (1. Mrz 2011)

Hallo,
ich möchte gerne über eine HashMap itterieren. Die Map ist:

```
HashMap<Ressource, Integer> benötigte_Ressourcen = new HashMap<Ressource, Integer>();
```
Ich iteriere mit:

```
for(Ressource res : benötigte_Ressourcen.keySet()){
			
			
			sit.getResourcen().put(res, 2);
		}
```
drüber. Die Hash Funktion in Ressource:

```
@Override
	public int hashCode() {
		if(name.equals("Holz"))
		
			return 8;
		
		else return 9;
	}
```
 Dummymässig implementiert. 
Im Debugger ist der HashWert im KeySet immer 8. Aber res hat immer den HashWert 0. Egal was ich mach. Kann mir das jemand erklären?
gruß


----------



## SlaterB (1. Mrz 2011)

was ist deine Frage? was mit der Anzeige im Debugger nicht stimmt?
du nennst nichtmal das verwendete Tool, im Zweifel ist das aber komplett keine Java-Frage

vorerst nach Vermutung Titel umbenannt und verschoben


----------



## Paddel (1. Mrz 2011)

Die Frage ist wieso mir kein HashCode berechnet wird und dieser immer 0 ist. Wenn ich das Objekt im Debugger untersuche hat es hash=0. Und eigentlich muss er mir als Hash eine 8 oder eine 9 ausgeben.  res.getHash() tut das auch.

Meinst du mit Tool Eclipse?


----------



## Paddel (1. Mrz 2011)

Bild.jpg - Bilder und Fotos kostenlos auf ImageBanana hochladen

da hab ich das mal aus dem Debugger hochgeladen. Der Hash müsste doch 8 sein?


----------



## SlaterB (1. Mrz 2011)

mit mir triffst du leider auf einen überzeugten Debugger-Nicht-Nutzer,
so ein Ding ist eine Blackbox, das kann 0, 8, 9 oder 'Guttenberg' anzeigen, hat alles absolut keine Aussage,
solange es stimmt und nachvollziehbar ist, dann ist alles gut, aber Fehler kann man in einer Blackbox nicht erklären

wenn du ein Java-Programm hast mit Java-Objekten und Java-Methoden die Java-int-Werte zurückgeben,
dann gib doch diese Informationen ganz einfach aus:

```
System.out.println("Object sowieso hat folgenden Hashwert: "+o.hashCode());
```
damit haben sich alle Fragen erledigt oder kommt da auch 0 raus, für ein Objekt mit der überschriebenen Methode?
dann muss man genauer agieren, etwa:

```
System.out.println("gleich wird Hashwert abgefragt");
System.out.println("Object sowieso hat folgenden Hashwert: "+o.hashCode());

sowie

@Override
    public int hashCode() {
        System.out.println("in hashCode der Klasse ..");
        if(name.equals("Holz")) {        
            System.out.println("werde gleich 8 zurückgeben");
            return 8;
        }
        System.out.println("werde gleich 9 zurückgeben");
        return 9;
    }
```
anhand des Logs der Ausgaben kann man ungefähr erkennen was so alles passiert,

natürlich sind gewisse Fehlersituationen immer denkbar, etwa noch mehr überschriebene Klassen mit anderen hashCode()-Methoden,
Debugger kann gewiss auch dabei helfen

edit:
die Anzeige im Debugger ist das Klassenattribut hash im String "Holz",
Methoden-Werte werden vielleicht gar nicht angezeigt


----------



## Paddel (1. Mrz 2011)

Alles klar hab den Fehler. In der equals Methode den String mit == statt mit .equals() verglichen. Blöder Fehler.
Danke für deine Hilfe!


----------

