Arraylist Nullpointerexception。 add-function的例外

时间:2016-11-20 10:05:29

标签: java model-view-controller arraylist nullpointerexception console

我试图创建一个Arraylist。我尝试添加我的对象,但如果我运行程序,我得到这些错误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)

所以我不是一个非常优秀的程序员,我试图找出并在Stackoverflow中搜索。我找到很多帖子,创作者忘记了Arraylist的初始化,许多创作者在1类文件中使用了Arraylist。 我可能使用MVC模式,我的Arraylist在模型类中。我的班级银行可以创建一个客户(Kunde),Kunde继承私人客户(Privatkunde)。属性在控制器类Menue中处理。

package model;

import java.util.ArrayList;

公共班级银行{//班级开始

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()

现在我向你展示控制器级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 + "]";
}

所以我希望我的解释非常好,因为我来自德国。

祝你好运 绿茶

3 个答案:

答案 0 :(得分:0)

更改

private Bank bank;

在课堂上&#34; Menue&#34;到:

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

这将修复nullpointerexception,但现在你必须改变

bank.addKunde(privKunde);

其中privKunde应该是&#34; Kunde&#34; -object而不是&#34; PrivatKunde&#34; -object

答案 1 :(得分:0)

至于你的构造函数:

private ArrayList<Kunde> kundeList;

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

你传递了一个Kunde对象,但是没有对它做任何事情。如果你希望它在你的列表中,你必须在那里添加它(我的德语不是很好,但名称kundeListe可能不是很好选择):

private ArrayList<Kunde> kundeList;

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

}

以下方法是否应该在列表中添加元素?因为目前它只返回Bank对象,就是它。

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

如果您想将Kunde实际添加到列表中,则必须在this.kundeList上显式调用它。

对于NullPointerException,请调用:

 bank.addKunde(privKunde);

在legePrivatkundeAn方法中。这个“银行”对象没有被初始化,所以要么创建它的新实例,要么确保它之前被初始化。

答案 2 :(得分:0)

在类Menue中,Bank bank实例变量仅被声明且未初始化,因此它的值为null。当bank为空时,调用bank.addKunde(privKunde);会抛出空指针异常。
为避免这种情况,请在使用Bank bank类之前初始化Menue变量,然后再使用它 private Bank bank = new Bank(kunde);