# Objekte in ArrayList einfügen



## xerxes12 (25. Dez 2017)

Hallo liebe Community, 

ich bin ein absoluter Anfänger in Java bzw Programmierung. Ich habe das Problem, dass ich die Fehlermeldung  java.lang.NullPointerException bekomme, wenn ich ein erstelltes objekt einer anderern Klasse in ein array einzufügen. Ich schicke lieber mal den Code : 

```
public class Kasse
{
   
   
    public int kassennummer;
    public int filialenid;
    public boolean aktivierung;
    public ArrayList<Artikel> warenkorb;
   
   
    double Total = 0;
    double Netto = 0;
    double MWST = 0;
  
  

public Kasse(int filialenid,int kassennummer, boolean aktivierung)
{
    //warenkorb=null;
   
       this.kassennummer=kassennummer;
       this.filialenid=filialenid;
       this.aktivierung=aktivierung;
       ArrayList<Artikel> warenkorb = new ArrayList<Artikel>();
   

}

public void addArtikel(Artikel artikel)
{
    warenkorb.add(artikel);
}
```

bei warenkorb.add sollte das Objekt, welches in der Klasse Example erstellt wurde, in die ArrayList eingefügt werden. Jedoch klappt das nicht (Fehlermeldung). Habe es auch mit einem normalen Array versucht und es kommt dasselbe :/ Hier nochmal die Example Klasse :

```
public class example
{
    public static void main(String args[]) {
       Filiale filiale1 = new Filiale(1, "Berliner Str 3", "Gut&Günstig Süd");
             
       Artikel artikel1 = new Artikel(1, 1, 2.40, "pepsi", "Coke Industrie", "26.02.2018");
       Artikel artikel2 = new Artikel(2, 1, 5.40, "schnaps", "weinerei", "26.02.2018");
       Artikel artikel3 = new Artikel(3, 1, 2.40, "Salami", "Wurster", "27.03.2018");
      
       Kundenkarte Kunde1 = new Kundenkarte(1234, "Arnold", "Schwarz", "Obststraße 4");
       Kundenkarte Kunde2 = new Kundenkarte(3456, "Arnold", "Schwarz", "Obststraße 4");
     
       Kassenbon kassenbon1 = new Kassenbon(filiale1.filialenid,10, true );
      
       kassenbon1.addArtikel(artikel1);
       kassenbon1.addArtikel(artikel2);
       kassenbon1.addArtikel(artikel1);
       kassenbon1.addArtikel(artikel1);
       kassenbon1.addArtikel(artikel2);
      
       kassenbon1.stop();
       kassenbon1.druckBon();
```

Bin ebenso neu in dieser Gruppe. Falls ich also Codes zu viel/ zu wenig eingefügt habe, sagt bescheid.


----------



## Javinner (25. Dez 2017)

@xerxes12
Poste doch mal die ganze Fehlermeldung hier.
Es scheint mir eher, der Hund liegt wo anders begraben..

edit: was passiert hier? Bitte poste den Code.

```
kassenbon1.stop();
kassenbon1.druckBon();
```


----------



## xerxes12 (25. Dez 2017)

Fehlermeldung : 

java.lang.NullPointerException
    at Kasse.addArtikel(Kasse.java:33)
    at example.main(example.java:16)


----------



## Javinner (25. Dez 2017)

xerxes12 hat gesagt.:


> Fehlermeldung :
> 
> java.lang.NullPointerException
> at Kasse.addArtikel(Kasse.java:33)
> at example.main(example.java:16)


Dazu am besten die ganze Main, wenn es nicht zu groß ist.
An der Stelle, wo du den Fehler vermutest, kann dieser nicht sein.


----------



## xerxes12 (25. Dez 2017)

an diesen stellen wird die Methode der klasse Kasse aufgerufen (kassenbon und klasse sind vererbt miteinander, falls man das so sagen darf). 

```
import java.util.*;

public class Kasse
{
   
   
    public int kassennummer;
    public int filialenid;
    public boolean aktivierung;
    public ArrayList<Artikel> warenkorb;
   
   
    double Total = 0;
    double Netto = 0;
    double MWST = 0;
  
  

public Kasse(int filialenid,int kassennummer, boolean aktivierung)
{
    //warenkorb=null;
   
       this.kassennummer=kassennummer;
       this.filialenid=filialenid;
       this.aktivierung=aktivierung;
       ArrayList<Artikel> warenkorb = new ArrayList<Artikel>();
   

}

public void addArtikel(Artikel artikel)
{
    warenkorb.add(artikel);
}

public void stop()         //berechnet alles
{

   
    for(int i=0; i < warenkorb.size(); i++)
    {
        Total = Total + warenkorb.get(i).preis;
      
      
    }
    Netto = Total*100/119;
    MWST = Total - Netto;
}



public int getkassennummer()
{
    return this.kassennummer=kassennummer;
}

public void setkassennummer()
{
    this.kassennummer=kassennummer;
}



}
```


----------



## Javinner (25. Dez 2017)

a) Dein Code ist stark verbesserungswürdig
b) Wo rufst du die Klasse Kasse denn auf? In der Main sehe ich es nicht!


----------



## xerxes12 (25. Dez 2017)

1) ja da hast du sicherlich recht 
ich schick am besten alles 

```
public class Filiale
{
    protected int filialenid;
    protected String adresse;
    protected String name;

public Filiale(int filialenid, String adresse, String name)
{
    this.filialenid=filialenid;
    this.adresse=adresse;
    this.name=name;
}

public int getFilialenid()
{
    return this.filialenid=filialenid;
}

public void setFilialenid()
{
    this.filialenid=filialenid;
}
public String getadresse()
{
    return this.adresse=adresse;
}

public void setadresse()
{
    this.adresse=adresse;
}
public String getname()
{
    return this.name=name;
}

public void setname()
{
    this.name=name;
}
}
```


```
import java.util.*;

public class Kasse
{
   
   
    public int kassennummer;
    public int filialenid;
    public boolean aktivierung;
    public ArrayList<Artikel> warenkorb;
   
   
    double Total = 0;
    double Netto = 0;
    double MWST = 0;
  
  

public Kasse(int filialenid,int kassennummer, boolean aktivierung)
{
    //warenkorb=null;
   
       this.kassennummer=kassennummer;
       this.filialenid=filialenid;
       this.aktivierung=aktivierung;
       ArrayList<Artikel> warenkorb = new ArrayList<Artikel>();
   

}

public void addArtikel(Artikel artikel)
{
    warenkorb.add(artikel);
}

public void stop()         //berechnet alles
{

   
    for(int i=0; i < warenkorb.size(); i++)
    {
        Total = Total + warenkorb.get(i).preis;
      
      
    }
    Netto = Total*100/119;
    MWST = Total - Netto;
}



public int getkassennummer()
{
    return this.kassennummer=kassennummer;
}

public void setkassennummer()
{
    this.kassennummer=kassennummer;
}



}
```


```
public class Kassenbon extends Kasse{
    public int bonnummer;
    public String datum;
     
  
    public Kassenbon(int kassennummer, int filialenid, boolean aktivierung)
    {
        super(kassennummer, filialenid, aktivierung);
       
       
    
    }
    public void druckBon(){
    warenkorb = null;
    System.out.println(Total);
    System.out.println(MWST);
    System.out.println(Netto);

    }
    }
```


```
public class Artikel
{
    protected String name;
    protected int artnummer;
    protected double preis;
    protected String Hersteller;
    protected String Verfallsdatum;
    protected int Kategorie;
  

   
public static void main(String [] arguments) {}

public Artikel(int artnummer, int Kategorie, double preis, String name, String Hersteller, String Verfallsdatum )
{
  this.artnummer=artnummer;
  this.Kategorie=Kategorie;
  this.preis=preis;
  this.name=name;
  this.Hersteller=Hersteller;
  this.Verfallsdatum=Verfallsdatum;
}

public String getname()
{
    return this.name=name;
}

public void setname(String name)
{
    this.name=name;
}
public int getArtnummer()
{
    return this.artnummer=artnummer;
}

public void setartnummer(int artnummer)
{
    this.artnummer=artnummer;
}
public double getPreis()
{
    return this.preis=preis;
}

public void setPreis(double preis)
{
    this.preis=preis;
}
public String getHersteller()
{
    return this.Hersteller=Hersteller;
}

public void setHersteller(String Hersteller)
{
    this.Hersteller=Hersteller;
}
public String getVerfallsdatum()
{
    return this.Verfallsdatum=Verfallsdatum;
}

public void setVerfallsdatum(String Verfallsdatum)
{
    this.Verfallsdatum=Verfallsdatum;
}
public int getKategorie()
{
    return this.Kategorie=Kategorie;
}

public void setKategorie(int Kategorie)
{
    this.Kategorie=Kategorie;
}
}
```


```
public class example
{
    public static void main(String args[]) {
       Filiale filiale1 = new Filiale(1, "Berliner Str 3", "Gut&Günstig Süd");
             
       Artikel artikel1 = new Artikel(1, 1, 2.40, "pepsi", "Coke Industrie", "26.02.2018");
       Artikel artikel2 = new Artikel(2, 1, 5.40, "schnaps", "weinerei", "26.02.2018");
       Artikel artikel3 = new Artikel(3, 1, 2.40, "Salami", "Wurster", "27.03.2018");
      
       Kundenkarte Kunde1 = new Kundenkarte(1234, "Arnold", "Schwarz", "Obststraße 4");
       Kundenkarte Kunde2 = new Kundenkarte(3456, "Arnold", "Schwarz", "Obststraße 4");
     
       Kassenbon kassenbon1 = new Kassenbon(filiale1.filialenid,10, true );
      
       kassenbon1.addArtikel(artikel1);
       kassenbon1.addArtikel(artikel2);
       kassenbon1.addArtikel(artikel1);
       kassenbon1.addArtikel(artikel1);
       kassenbon1.addArtikel(artikel2);
      
       kassenbon1.stop();
       kassenbon1.druckBon();
```
ist ziemlich viel, sorry ^^


----------



## Robat (26. Dez 2017)

xerxes12 hat gesagt.:


> ArrayList<Artikel> warenkorb = *new* ArrayList<Artikel>();


Anstatt deine globale Warenkorb Variable zu initialisieren erstellst du hier eine lokale Variable. Daher ist der eigentliche Warenkorb immer Null - - > Exception.


----------



## fhoffmann (26. Dez 2017)

xerxes12 hat gesagt.:


> ArrayList<Artikel> warenkorb = *new* ArrayList<Artikel>();


Hier erzeugst du eine lokale Variable "warenkorb"; dies ist nicht das Member "warenkorb".
Also stattdessen:

```
warenkorb = new ArrayList<Artikel>();
```
ohne ArrayList<Artikel> davor.

(edit: da war Robat schneller)


----------



## xerxes12 (26. Dez 2017)

Vielen dank für die Antwort (an beide), es hat geklappt


----------



## Javinner (26. Dez 2017)

Die Fragen, die ich mir stelle:
Müssen alle Klassen public sein? http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_05_002.htm
Müssen die Instanzvariablen es auch? http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_03_001.htm 
Wie funktioniert ein Setter? http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_05_002.htm
Wo ist der Unterschied zum Getter?
Man sollte anstatt Instanzvariablen lokale Variablen verwenden: http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_02_004.htm

Ich für mein Teil versuche etwas vor meinem geistigen Auge zu führen, so dass der Code eine Geschichte erzählt.
Dadurch fällt es einem viel leichter, etwas nachzuvollziehen.
Beispiel auf die Schnelle:

```
public class Einkaufstrip
{

    public static void main(String[] args)
    {
        Filiale filiale = new Filiale();
        Kunde kunde = new Kunde("Manfred", "Schmidt");

        filiale.filiale_IN(kunde);
        filiale.kundenAktuell();

        Produkt[] einkauf = {new Produkt("Milch", 0.79), new Produkt("Schokolade", 1.29), new Produkt("Wurst", 2.99)};
        filiale.einkaufsWagen(einkauf);
        filiale.kundenRechnung(kunde);
        filiale.kundenAktuell();

        kunde.inhalt_Bag();

    }

}

/** Konsolenausgabe */
Kunden ID: 7850064, Name: Manfred, Nachname: Schmidt
Bankdaten: Bank: Landesbank Baden-Württemberg, Kontonummer: 357763230
Name: Milch, Preis: 0.79 Name: Schokolade, Preis: 1.29 Name: Wurst, Preis: 2.99  
Ihrem Konto wurde Summe: 5.07 € abgezogen
Es sind derzeit keine Kunden in der Filiale
Name: Milch, Preis: 0.79 Name: Schokolade, Preis: 1.29 Name: Wurst, Preis: 2.99
```


----------

