Klassen Adressverwaltung

Lieger

Mitglied
Hi zusammen,
Ich habe (mal wieder) ein kleines Problem bei einer Aufgabe aus meinem Java-Buch. In dem aktuellen kapitel geht es um Klassen. (Deshalb der Präfix)

Die Aufgabe lautet:
Erstelle ein Adressverwaltungs-Programm, dass 20 Einträge verwalten kann. Ein Eintrag beinhaltet den Namen, die Strasse, die Hausnummer, den Wohnort, die Postleitzahl, die E-Mail Adresse und einen Kommentar.

Mein Programm, das leider nicht funktioniert: (Fehler ist unten aufgeführt)

Java:
import Prog1Tools.IOTools;
public class Adressverwaltung {
	public static class Adresse {
		public String name;
		public String strasse;
		public int hausnummer;
		public int postleitzahl;
		public String wohnort;
		public String mail;
		public String kommentar;
	}
		public static void main (String args[]){
			Adresse AdresseObjekt;
			AdresseObjekt = new Adresse();
			Adresse[] adressen = new Adresse[20];
			AdresseObjekt = adressen[0];
			for (int i = 0; i < adressen.length; i++){
				adressen[i] = new Adresse();
			}
				
			for (int auswahl = 0;auswahl != 4;){
			System.out.println("Was möchtest du tun?");
			System.out.println("1 = Eingabe machen");
			System.out.println("2 = Adresse auslesen lassen");
			System.out.println("3 = Aktuelle Adressennummer ändern");
			System.out.println("4 = Beenden");
			auswahl = IOTools.readInt("Deine Wahl:");
			switch (auswahl){
			case 1: 
				AdresseObjekt.name = IOTools.readLine("Name:");
				AdresseObjekt.strasse = IOTools.readLine("Strasse:");
				AdresseObjekt.hausnummer = IOTools.readInt("Hausnummer:");
				AdresseObjekt.postleitzahl = IOTools.readInt("Postleitzahl:");
				AdresseObjekt.wohnort = IOTools.readLine("Wohnort:");
				AdresseObjekt.mail = IOTools.readLine("Mail:");
				AdresseObjekt.kommentar = IOTools.readLine("Kommentar:");
				System.out.println("");
			System.out.println("Eingabe abgeschlossen");
				break;
				
			case 2:
				System.out.println("Name:" + AdresseObjekt.name);
				System.out.println("Strasse:" + AdresseObjekt.strasse);
				System.out.println("Hausnummer:" + AdresseObjekt.hausnummer);
				System.out.println("Postleitzahl:" + AdresseObjekt.postleitzahl);
				System.out.println("Wohnort:" + AdresseObjekt.wohnort);
				System.out.println("Mail:" + AdresseObjekt.mail);
				System.out.println("Kommentar:" + AdresseObjekt.kommentar);
			    System.out.println("");
		    System.out.println("Ausgabe abgeschlossen");
		    break;
		    
			case 3: 
				int n = 0;
				n = IOTools.readInt("Adresse:");
				AdresseObjekt = adressen[n];
			System.out.println("Adresse erfolgreich geändert");
				break;
			
			case 4:
				break;
			}
			}
			System.out.println("Beendet");
		}
}

Das Programm läuft bis zu dem Zeitpunkt, an dem ich eine Eingabe machen will. Dann kommt:

Exception in thread "main" java.lang.NullPointerException
at Adressverwaltung.main(Adressverwaltung.java:30)

Was bedeutet der Fehler genau?
Wie kann ich ihn beheben?

Wäre nett wenn mir jemand helfen könnte!

Gruss
Lieger
 
H

hüteüberhüte

Gast
Java:
Adresse[] adressen = new Adresse[20];
AdresseObjekt = adressen[0];

adressen[0] ist an dieser Stelle null
 
I

Ick228383

Gast
Der Fehler besagt, Du auf einen nicht-belegten Speicherbereich zugreifen möchtest. Dieser wird in Java mit dem Schlüsselwort "null" bezeichnet.

Bei der Objekt Orientierten Programmierung kannst Du einfach zwischen Klassen und Objekten unterscheiden. Eine Klasse ist wie ein Bauplan, ein Objekt das gebaute Exemplar. Methoden kannst Du immer nur für ein konkretes Exemplar ausführen (statische Methoden bilden hier eine Ausnahme, ist jetzt aber nachrangig).

Die Variablen in Java referenzieren immer ein Objekt, das heißt die zeigen auf einen Speicherbereich in dem das Objekt liegt. Es gibt auch hier Ausnahmen, die sogenannten primitiven Datentypen (fangen mit einem Kleinbuchstaben an).

Java sagt Dir nun, dass Du in Zeile 30 versuchst eine Methode aufzurufen, die zugehörige Variable zeigt aber auf kein gültiges Objekt (sondern auf einen leeren Speicher).
Zeile 30: "AdresseObjekt.name = IOTools.readLine("Name:");"

Das heißt "AdresseObjekt" oder "IOTools" ist null. Wie hüteüberhüte schon sagte, liegt der Fehler darin, dass Du "AdresseObjekt" eine null-Referenz zuweist. Legst Du eine Variable an, die einen Klassentypen hat, ist der Standardwert immer null.
 

Lieger

Mitglied
Ah, das ist also der Fehler :)
Vielen dank für eure Hilfe, ich hab wie ihr seht noch ein bisschen Mühe den Aufbau von Java zu verstehen, aber mit Übung wird das schon noch ;)

Gruss
Lieger
 
H

hüteüberhüte

Gast
... und Variablennamen klein (lowerCamelCase). Elemente eines neuen Arrays nicht-primitiver Typen (Referenztypen) sind nach der Initialisierung des Arrays immer null.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben