HashMap Problem

Equated

Mitglied
Hallo alle miteinander,

ich wollte eine HashMap anwenden, bin aber auf ein Problem gestoßen, das ich irgendwie nicht lösen kann. Und zwar hab ich eine Klasse mit einer HashMap mit einem Objekt als Key und einem Boolean als Value. Um das Objekt auszugeben, hab ich die Methode toString geschrieben, aber wenn ich das Programm laufen lasse kommt folgende Meldung: Exception in thread "main" java.lang.NullPointerException !?

Mein Code sieht so aus:
Java:
import java.util.*;

public class Spiel {
  
   private LinkedHashMap<Karte,Boolean> Kartenstapel;
   private ArrayList<Spieler> Spielerliste;
   private int Rundenanzahl;
  
   public Spiel()
   {
    
     //this.Rundenanzahl=Rundenanzahl;
     Karte karte=new Karte("Herz","rot",3);
     Kartenstapel.put(karte,true);
    }

public void KartenAusgeben()
   {
     //ArrayList<Karte> Kartentemp = new ArrayList<>();
     Set set= Kartenstapel.keySet();
     Iterator ite = set.iterator();
    
     while(ite.hasNext())
     {
       Object object= ite.next();
       System.out.println(object.toString());
     }

  }

}

--------------------------------------------------------------------------------------------
public class Karte {

   private String Bezeichnung;
   private String Farbe;
   private int Wert;
  
   public Karte()
   {
    
   }
  
   public Karte(String Bezeichnung, String Farbe, int Wert)
   {
     this.Bezeichnung=Bezeichnung;
     this.Farbe=Farbe;
     this.Wert=Wert;
   }
  
   public Karte(String Bezeichnung, String Farbe)
   {
     this.Bezeichnung=Bezeichnung;
     this.Farbe=Farbe;
    
   }

   public String getBezeichnung() {
     return Bezeichnung;
   }

   public void setBezeichnung(String bezeichnung) {
     Bezeichnung = bezeichnung;
   }

   public String getFarbe() {
     return Farbe;
   }

   public void setFarbe(String farbe) {
     Farbe = farbe;
   }

   public int getWert() {
     return Wert;
   }

   public void setWert(int wert) {
     Wert = wert;
   }
  
   public String toString()
   {
     return Bezeichnung+" , "+Farbe+" , "+Wert;
   }
  
}
----------------------------------------------------------------------------------

import java.util.*;

public class Runner {

   public static void main(String[] args) {
     // TODO Auto-generated method stub

Spiel spiel=new Spiel();
     spiel.KartenAusgeben();
       }
}

Kann mir jemand helfen? Ich bin sicher, dass ich einen sehr dummen Fehler gemacht habe:/
Danke im Voraus!
 
Du hast zwar eine Referenz auf eine LinkedHashMap<Karte,Boolean> erstellt, aber diese Referenz sollte noch "gefüllt werden".
ändere die Zeile in private LinkedHashMap<Karte,Boolean> Kartenstapel = new LinkedHashMap<>();
(bei der ArrayList ähnlich)

Tipp: Verwende für Methoden-Namen lowerCamelCase (d.h. für den ersten Buchstaben einen kleinen Buchstaben) genauso für Variablenbezeichner. (das sind Konventionen, damit andere sofort verstehen, um was es geht.)
 
Einen Unterschied macht es dann, wenn man z.B. mehrere Konstruktoren hat. Dann müsste man die Initialisierung in jedem Konstruktor einfügen und hat redundanten Code. Alternativ schreibt man es nur in den Standardkonstruktor, muss dann aber den explizit in jedem anderen Konstruktor aufrufen. Sowas kann bei komplexeren Klassen auch schnell unübersichtlich werden.

Ich würde es einfach so machen: Alle einfachen Initialisierungen wie bei deiner HashMap direkt an die Variable. Wenn du komplexe Initialisierungen machst, kann man dafür ggf. eine private final init() Methode schreiben, die man dann im Konstruktor aufruft. So hält man Konstruktoren klein und übersichtlich. In die gehört eher sowas rein wie Parameter überprüfen und Exceptions werfen, wenn ungültige Werte übergeben wurden.

Nebenbei: Benutzt du einen Debugger? Falls nein, versuch dich mal damit auseinanderzusetzen. Damit kann man solchen Fehlern eigentlich recht schnell auf den Grund gehen 😉
 

Zurück
Oben