Java Problem NPE?
Hallo zusammen,
anliegend ein Teil des Quellcodes meiner Klasse Vokabel.
Das Ziel ist es, dass eine Vokabel 1 bis unendlich viele Übersetzungsmöglichkeiten haben kann, die in einer List gespeichert werden. Dabei habe ich probiert eine List EnglischeBedeutung zu erstellen, wo die einzelnen Bedeutungen nach bedarf hinzugefügt werden. Leider komme ich immer auf eine Null pointer exception und finde meinen Fehler noch nicht ganz. Bitte um kurze Hilfe :) MfG Till
private String vEnglisch;
private String vDeutsch;
private List<String>EnglischeBedeutung;
public Vokabelv2(String pEnglisch, String pDeutsch)
{
vEnglisch = pEnglisch;
vDeutsch = pDeutsch;
EnglischeBedeutung.append(pEnglisch);
}
public void fuegeWeitereEnglischBedeutungHinzu(String pEnglisch2)
{
EnglischeBedeutung.append(pEnglisch2);
}
2 Antworten
Wie Gastnr007 schon geschrieben hat, Du musst das Objekt initialisieren ansonsten erhälst Du bei einem Methodenaufruf von eben diesem eine NPE (NullPointerException). NPE bedeutet immer, dass eine Variable auf null steht und Du versuchst darauf eine Methode aufzurufen.
Also einfach mit einer leeren Liste initalisieren.
private List<String>EnglischeBedeutung = new ArrayList<String>();
Davon ab, auch da doch noch ganz am Anfang stehst: Variablen und Attribute werden klein geschrieben (englischeBedeutung). Machst Du teilweise ja auch schon.
Ich könnte mir auch vorstellen, dass Du statt Listen Maps benutzt, dann hast Du die Verknüpfung zwischen Deutsch und Englisch.
Map<String, String> translation = new HashMap<String, String>();
So könntest Du dann englische Übersetzungen hinzufügen:
translation.put("deutsch", "englisch");
Und so würdest Du sie wieder abrufen:
String englischTranslation = translation.get("deutsch");
"deutsch" und "englisch" sind hier nur Platzhalter-Strings und können durch deine entsprechenden Variablen ersetzt werden.
Ansonsten wäre es wahrscheinlich sinnvoller, abhängig von deinem Lernfortschritt und dem Umgang mit objektorientierter Programmierung, die Übersetzung und den Ursprungstext in einem Objekt zu vereinen.
Zum Beispiel:
public class Translation {
private final String german;
private final String english;
public Translation(String german, String english) {
this.german=german;
this.english=english;
}
public String getGerman() {
return this.german;
}
public String getEnglish(){
return this.english;
}
}
Du würdest Objekte dieser Klasse dann einfach in einer Liste speichern:
List<Translation> translations = new LinkedList<Translation>();
Hat den großen Vorteil, dass eine Translation den deutschen und englischen Begriff kapselt und diese untrennbar verbindet.
Abhängig von deinem Arbeitseifer kannst Du dir noch Gedanken machen wie man verschiedene Sprachen unterstützt und sich nicht nur auf Deutsch und English fixiert, aber das geht evtl. schon über deinen Rahmen hinaus.
Gruß
Deine EnglischeBedeutung bleibt doch immer null, da du sie nie initialisierst:
setze am Anfang ein EnglischeBedeutung = new ArrayList<>(); hin. (oder LinkedList)