# unerklärliche NullPointerException



## Mister2020 (18. Feb 2020)

Hallo an alle,

ich versuche gerade, mir selbst Programmieren beizubrigen und habe dabei folgendes Programm geschrieben (ursprünglich stammt die Aufgabe von freitagsrunde.org). Es soll einen Kassenzettel erstellen:


```
public class Kassenzettel1 {
    
    public class Ware_Preis {
        public String ware;
        public int anzahl;
        public float preis;
    }
    
    public static void main(String[] args) {
        
        Ware_Preis[] einkaufsliste = new Ware_Preis[4];
        float budget;
        float gesamtpreis = 0.00f;
        
        einkaufsliste[0].ware = "Wurst";
        einkaufsliste[0].preis = 4.20f;
        einkaufsliste[0].anzahl = 1;
        einkaufsliste[1].ware = "Käse";
        einkaufsliste[1].preis = 2.30f;
        einkaufsliste[1].anzahl = 1;
        einkaufsliste[2].ware = "Brot";
        einkaufsliste[2].preis = 2.10f;
        einkaufsliste[2].anzahl = 1;
        einkaufsliste[3].ware = "DVD";
        einkaufsliste[3].preis = 12.00f;
        einkaufsliste[3].anzahl = 2;
        
        budget = 50.00f;
        
        for(int i = 0;i < einkaufsliste.length;i++) {
            gesamtpreis += einkaufsliste[i].preis * einkaufsliste[i].anzahl;
        }
        
        if(budget < gesamtpreis) System.out.println("das Geld reicht nicht!");
        else {
            for(int j = 0;j<einkaufsliste.length;j++) {
                System.out.println(einkaufsliste[j].ware + "\t" + einkaufsliste[j].anzahl + "x " + einkaufsliste[j].preis + " EUR");
            }
        }
    }
}
```

Mir geht es hier nicht um das fehlende Exception Handling oder die "ungewöhnliche" Verwendung der inneren Klasse, sondern um folgendes:
Wenn ich das Programm compiliere, läuft es anstandslos durch. Bei der Ausführung kommt es aber zu dieser Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
        at Kassenzettel1.main(Kassenzettel1.java:15)

Ich bin den Code schon mehrfach geändert (while- statt for-Schleife, etc.), aber der Fehler bleibt bestehen. 

Kann mir jemand sagen, was daran falsch ist?


----------



## Dompteur (18. Feb 2020)

Das ist ein klassischer Fehler bei der Arbeit mit Arrays, die nicht primitive Type (also Klassen) enthalten sollen.
Eine gute Erklärung, was da passiert findest du hier : http://openbook.rheinwerk-verlag.de/javainsel/03_008.html#u3.8.11


----------



## abc66 (18. Feb 2020)

Du musst die Array Inhalte initialisieren.


----------



## M.L. (19. Feb 2020)

Und für später den Optional-Parameter beachten: http://openbook.rheinwerk-verlag.de/javainsel/11_008.html#i11_19


----------



## Mister2020 (19. Feb 2020)

Vielen Dank für eure Erklärungen und eure Links. 

Ich habe zwar nicht alles verstanden, aber ich habe jetzt in der Klasse einen Konstruktor definiert und die Werte per Konstruktor gesetzt. Jetzt funktioniert es.


----------



## MoxxiManagarm (19. Feb 2020)

Mister2020 hat gesagt.:


> Ich habe zwar nicht alles verstanden,


Stelle es dir am besten bildlich vor. Beispiel: Ein Regal mit durchsichtigen Aufbewahrungsboxen.


```
Box boxen = new Boxen[4];
```

Damit baust du nur ein Regal, welches nur Platz für solche Boxen hat. Nichts anders darf hinein.
Danach hast du 4 leere Fächer (null).

Du hast nun 2 Möglichkeiten das Regal zu befüllen.


```
box[0] = new Box(aufschrift, inhalt);
```

Damit tust du eine bereits fertige und beschriftete Box in das Regal.


```
box[0] = new Box();
box[0].aufschrift = aufschrift;
box[0].inhalt = inhalt;
```

Damit tust du erst eine leere Box in das Regal und beschriftest und befüllst diese anschließend.


----------



## Mister2020 (19. Feb 2020)

Vielen Dank. Ich habe es jetzt verstanden


----------

