unerklärliche NullPointerException

Mister2020

Mitglied
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:

Java:
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?
 

Mister2020

Mitglied
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

Top Contributor
Ich habe zwar nicht alles verstanden,
Stelle es dir am besten bildlich vor. Beispiel: Ein Regal mit durchsichtigen Aufbewahrungsboxen.

Java:
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.

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

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

Java:
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.
 

Neue Themen


Oben