0

I tried to create a Arraylist. I try to add my object but if I run the Programm I get these Errors NullpointerException.

Exception in thread "main" java.lang.NullPointerException
at controller.Menue.legePrivatkundeAn(Menue.java:122)
at controller.Menue.liesPrivatkunde(Menue.java:94)
at controller.Menue.auswahlMenue(Menue.java:38)
at start.Starter.main(Starter.java:23)

So I am not a really good programmer and i tried to figure out and search in Stackoverflow. I find many posts wich the creator forgot to initial the Arraylist and many of the creator use the Arraylist in 1 class file. I probaly use MVC- Pattern and my Arraylist is in the Model-Class. My class bank can create a customer(Kunde) and Kunde inherits to privatecustomer(Privatkunde). The attributes are processed in the controller-class Menue.

package model;

import java.util.ArrayList;

public class Bank {// start of class

private String name;
private String bic;
private Adresse adresse;
private ArrayList<Kunde> kundeList;

public Bank(Kunde kundeListe) {
    super();
    this.kundeList = new ArrayList<Kunde>();
}

public ArrayList<Kunde> getKundeList() {
    for (Kunde kunde : kundeList) {
        System.out.println(kunde.toString());
    }// end of for-Schleife
    return kundeList;
}// end of getKundeList()

public Bank addKunde(Kunde kunde) {
    return this;
}

public Bank setKundeList(ArrayList<Kunde> kundeList) {
    this.kundeList = kundeList;
    return this;
}

@Override
public String toString() {
    return "Bank [Name= " + name + ", BIC= " + bic + ", Adresse= " + adresse + ", Kunden= " + kundeList + " ]";
}// end of toString()

Now i show u the controller-class Menue.

package controller;
import java.util.ArrayList;

import controller.KontoDarstellungsFunktion;
import model.*;
import io.*;

public class Menue {

private String auswahl;
private Bank bank;
private Kunde kunde;
private KontoDarstellungsFunktion kdf;

public void auswahlMenue() {

    do {
        menuePunkte();

        auswahl = MeineEingabe.erfasseAuswahl("Auswahl: ");
        switch (auswahl) {
        case "01":
            liesPrivatkunde();
            System.out.println("Privatkunde wurde angelegt!");
            break;
        case "02":
            liesFirmenkunde();
            System.out.println("Firmenkunde wurde angelegt!");
            break;
        case "03":
            liesKontoUndKdnr();
            System.out.println("Konto und Kundennummer wurde angelegt!");
            break;
        case "04":
            kdf.kundeMitKontoAnzeigenDurchKdnr();
            System.out.println("Kunde mit Konto durch Kundennummer wurde angezeigt!");
            break;
        case "05":
            kdf.kundeMitKontoAnzeigenDurchName();
            System.out.println("Kunde mit Konto durch Name wurde angezeigt!");
            break;
        case "06":
            kdf.kontoAnzeigenDurchIBAN();
            System.out.println("Kunde durch IBAN wurde angezeigt!");
            break;
        case "07":
            kdf.kundenUnsortiertAnzeigen();
            System.out.println("Kunde wurde unsortiert angezeigt!");
            break;
        case "08":
            kdf.kundenSortiertAnzeigenNachAufsteigenderKdnr();
            System.out.println("Kunde wurde sortiert nach aufsteigender Kundennummer angezeigt!");
            break;
        case "09":
            kdf.alleKontenUnsortiertAnzeigen();
            System.out.println("Alle Konten wurden unsortiert angezeigt!");
            break;
        case "10":
            System.out.println("Das Programm wurde Beendet!!");
            break;
        }

    } while (!auswahl.equals("10"));

}

public void liesPrivatkunde() {
    String vname = MeineEingabe.erfasseVorname("Vorname: ");
    String nname = MeineEingabe.erfasseNachname("Nachname: ");
    String telnummer = MeineEingabe.erfasseString("Telefonnummer: ");
    String eMail = MeineEingabe.erfasseEmail("E-Mail: ");
    String gebdat = MeineEingabe.erfasseDatum("Geburtsdatum: ");
    int kndnr = MeineEingabe.erfasseInt("Kundennummer: ");
    Adresse adr = liesAdresse();
    legePrivatkundeAn(vname, nname, telnummer, eMail, gebdat, kndnr, adr);

}

public Privatkunde legePrivatkundeAn(String vname, String nname, String telnummer, String eMail, String gebdat,
        int kndnr, Adresse adr) {

    Privatkunde privKunde = new Privatkunde(vname, nname, telnummer, eMail, gebdat, adr, kndnr, bank);

    privKunde.setVorname(vname);
    privKunde.setNachname(nname);
    privKunde.setTelefonNummer(telnummer);
    privKunde.setMail(eMail);
    privKunde.setGeburtsDatum(gebdat);
    privKunde.setKundenNummer(kndnr);
    privKunde.setAdresse(adr);

    bank.addKunde(privKunde);

    //System.out.println(privKunde.toString());


    return privKunde;
}

public Adresse liesAdresse() {
    String adresszeile1 = MeineEingabe.erfasseString("Adresszeile 1: ");
    String adresszeile2 = MeineEingabe.erfasseString("Adresszeile 2: ");
    String plz = MeineEingabe.erfassePostleitzahl("PLZ: ");
    String ort = MeineEingabe.erfasseString("Ort: ");

    return legeAdresseAn(adresszeile1, adresszeile2, plz, ort);
}


public Adresse legeAdresseAn(String adresszeile1, String adresszeile2, String plz, String ort) {
    Adresse adr = new Adresse(adresszeile1, adresszeile2, plz, ort);

    adr.setAdresszeile1(adresszeile1);
    adr.setAdresszeile2(adresszeile2);
    adr.setPostleitZahl(plz);
    adr.setOrt(ort);
    return adr;
}

public class Privatkunde extends Kunde {// start of class

private String vorname;
private String nachname;
private String telefonNummer;
private String email;
private String geburtsDatum;
private Adresse adresse;
private int kundenNummer;
private Bank bank;


public Privatkunde(String vorname, String nachname, String telefonNummer, String eMail, String geburtsDatum,
        Adresse adresse, int kundenNummer, Bank bank) {
    super(kundenNummer, adresse);
    this.vorname = vorname;
    this.nachname = nachname;
    this.telefonNummer = telefonNummer;
    this.email = eMail;
    this.geburtsDatum = geburtsDatum;
    this.adresse = adresse;
    this.kundenNummer = kundenNummer;
    this.bank = bank;
}


public String getVorname() {
    return vorname;
}

public void setVorname(String vorname) {
    this.vorname = vorname;
}


public String getNachname() {
    return nachname;
}


public void setNachname(String nachname) {
    this.nachname = nachname;
}

public String getTelefonNummer() {
    return telefonNummer;
}

public void setTelefonNummer(String telefonNummer) {
    this.telefonNummer = telefonNummer;
}

public String getMail() {
    return email;
}

public void setMail(String eMail) {
    this.email = eMail;
}

public String getGeburtsDatum() {
    return geburtsDatum;
}

public void setGeburtsDatum(String geburtsDatum) {
    this.geburtsDatum = geburtsDatum;
}

public Adresse getAdresse() {
    return adresse;
}

public void setAdresse(Adresse adresse) {
    this.adresse = adresse;
}

public String toString() {
    return "Privatkunde [Vorname= " + vorname + "| Nachname= " + nachname + "| Telefonnummer= " + telefonNummer
            + "| E-Mail= " + email + "| Geburtsdatum= " + geburtsDatum + "| Kundennummer= " + kundenNummer
            + "| Adresse= " + adresse + "]";
}

So I hope i have explained it really good because I am from Germany.

Best regards GreenTea

GreenTea
  • 35
  • 5

3 Answers3

0

Change

private Bank bank;

In class "Menue" to:

private Bank bank = new Bank(kunde); //this parameter makes no sense btw

this will fix the nullpointerexception, but now you have to change

bank.addKunde(privKunde);

where privKunde should be a "Kunde"-object and not a "PrivatKunde"-object

JonasAnon
  • 195
  • 1
  • 14
0

As for your constructor:

private ArrayList<Kunde> kundeList;

public Bank(Kunde kundeListe) {
    super();
   this.kundeList = new ArrayList<Kunde>();
}

You pass a Kunde object, but don't do anything with it. If you want it to be in your list, you must add it there (my German isn't very good, but the name kundeListe might not be very well chosen):

private ArrayList<Kunde> kundeList;

public Bank(Kunde kundeListe) {
    super();
    this.kundeList = new ArrayList<Kunde>();
    this.kundeList.add(kundeListe);

}

The following method, is it supposed to add an element to the list? Because currently it just returns the Bank object, that's it.

public Bank addKunde(Kunde kunde) {
    return this;
}

If you want to actually add the Kunde to the list, you must explicitly call it on this.kundeList

As for the NullPointerException, you call:

 bank.addKunde(privKunde);

in the legePrivatkundeAn-method. This "bank"-object is not initialized, so either make a new instance of it, or make sure it's been initialized before.

CounterFlame
  • 1,612
  • 21
  • 31
0

In class Menue, Bank bank instance variable is only declared and not initialized, hence it's value is null.As bank is null , calling bank.addKunde(privKunde); throws null pointer exception.
To avoid that please initialize Bank bank variable in Menue class before using it as,
private Bank bank = new Bank(kunde);.

Rohan
  • 3,068
  • 1
  • 20
  • 26