0

我試圖創建一個Arraylist。我嘗試添加我的對象,但是如果我運行Programm,我會得到這些錯誤NullpointerException。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() 

公共類銀行{//從現在開始我展示U中的控制器級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 + "]"; 
} 

所以我希望我解釋它真的很好,因爲我來自德國。

問候 綠茶

+0

哪條線是122? – MordechayS

+1

你在'Privatkunde'課程中如何設置'bank'? – Rohan

+0

我的銀行類只是創建一個kunde而kunde繼承了Privatkunde, – GreenTea

回答

0

變化

private Bank bank; 

在課堂上 「Menue」 到:

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

這將解決該NullPointerException異常,但現在你必須改變

bank.addKunde(privKunde); 

其中privKunde應該-object

+0

Ty爲你的幫助我剛剛完成 – GreenTea

0

至於你構造一個「孔德」 -object而不是「PrivatKunde」:

private ArrayList<Kunde> kundeList; 

public Bank(Kunde kundeListe) { 
    super(); 
    this.kundeList = new ArrayList<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; 
} 

如果你想真正的昆德添加到列表中,您必須顯式調用它this.kundeList

至於NullPointerException異常,你叫:

bank.addKunde(privKunde); 

在legePrivatkundeAn -方法。這個「bank」對象沒有被初始化,所以要麼創建一個新的實例,要麼確保它已經被初始化了。

+0

我剛剛做到了。 Ty所有非常好的社區^^ – GreenTea

0

Menue類,Bank bank實例變量只聲明並沒有初始化,因此它的價值null.As bank爲空,調用bank.addKunde(privKunde);拋出空指針異常。
爲了避免請Menue類使用它作爲,
private Bank bank = new Bank(kunde);之前初始化Bank bank變量。

+0

我做了它,它工作^^ – GreenTea