我试图创建一个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 + "]";
}
所以我希望我的解释非常好,因为我来自德国。
祝你好运 绿茶
答案 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);
。