[Java] java.lang.NullPointerException

VBKenner

Mitglied
Ich bekomme diesen Fehler in Zeile 19 und 5, wenn 19 als comment steht anstatt 19, 18 als Fehler. Ich habe jetzt schon wirklich recht lange darüber gegrübelt aber ich bin echt ratlos :confused:


Code:
 class tel {
 	public static void main(String args[]) {
 		telbook meinTelefonbuch = new telbook("rot");
 		System.out.println(meinTelefonbuch.color);
 		meinTelefonbuch.replace("Heinz", 5);	// fehler
 	}
 }
 
 class telbook {
 	String color;
 	items[] meineEintraege;
 	
 	public telbook(String myColor) {
 		color = myColor;
 		meineEintraege = new items[100];
 	}
 	
 	public void replace(String myName, int myIndex) {
 		meineEintraege[myIndex].name = myName;		    	//fehler
 		System.out.println(meineEintraege[myIndex].name);	//fehler
 	}
 }
 
 class items {
 	String name;
 	String number;
 	
 	public items(String myName, String myNumber) {
 		name = myName;
 		number = myNumber;
 	}
 }
 
Ich denke der Fehler liegt unter items

Du rufst einmal im Kostruktor die funktion "new Items" --> ich denke du willst damit den Konstruktor in der klasse darunter ansprechen! Aber es gibt keinen Konstruktor namens "items(int)"

Und da du die Items nicht erstellen kannst kommt die nullPointerException weil es sie nicht gibt.

Mach doch mal eine ausgabe in der du die Items Zählst die im Telefonbuch sind

Viellecht schreibe ich hier totalen Quatsch weil ich irgendwie quer gedacht habe aber vielleicht hilfts dir ja.

mfg Rmi
 
Da hammas doch:


Code:
	public void replace(String myName, int myIndex) {
		System.out.println(meineEintraege.length);
		System.out.println(meineEintraege[0].name); // --> Ergebniss: ""
		//meineEintraege[myIndex].name = myName;		    	//fehler
		//System.out.println(meineEintraege[myIndex].name);	//fehler
	}

Wenn die die Items erstellst gibst du ihnen keinen Text mit oder so und darum kannst du das Objekt "Heinz",5 nicht verschieben weil er Heinz nicht findet.

Glaub ich

Mfg Rmi
 
Hi VBKenner!

Fehler liegt bei dir in der Klasse telbook. Und zwar im Konstruktor.
Mit
Code:
meineEintraege = new items[100];
erstellst du keine 100 Instanzen von items. Damit legst du nur die Größe des Arrays fest. Du müsstest jetzt also noch z.B. in ner for-Schleife dem Array Instanzen von items zuordnen.

Wenn du nen Telefonbuch coden willst, wonach das ja ganz stark aussieht ;), würd ich dir empfehlen dir mal die Collections in Java anzuschauen. Die würden dir ne Menge Arbeit ersparen.

MfG
Sebastian
 
Erstmal vielen Dank für eure Hilfe :)

Ich habe es nun hingebekommen:
Code:
 class tel {
 	public static void main(String args[]) {
 		telbook meinTelefonbuch = new telbook("rot");
 		System.out.println(meinTelefonbuch.color);
 		meinTelefonbuch.showItem(5);
 		meinTelefonbuch.replace("Rudi", "776-456-111", 5);
 		meinTelefonbuch.showItem(5);
 	}
 }
 
 class telbook {
 	String color;
 	items[] meineEintraege;
 	
 	public telbook(String myColor) {
 		color = myColor;
 		meineEintraege = new items[100];		/* Damit wird ein Array mit der Größe von 100 erstellt. */
 		meineEintraege[5] = new items("Bert", "123-456-789");
 	}
 	
 	public void showItem(int myIndex) {
 		System.out.println(meineEintraege[myIndex].number);
 	}	
 	
 	public void replace(String myName, String myNumber, int myIndex) {
 		meineEintraege[myIndex].name = myName;
 		meineEintraege[myIndex].number = myNumber;
 	}
 }
 
 class items {
 	String name;
 	String number;
 	
 	public items(String myName, String myNumber) {
 		name = myName;
 		number = myNumber;
 	}
 }

So funktioniert es, aber mir wird folgendes nicht klar: Warum muss das Array, welches die Referenzvariablen speichert, die auf die items-Objekte zeigen, vom Typ items sein? Es speichert doch nur eine Referenzvariable und nicht name, und number. :confused:
 
Na weil das Referenzen auf items sind natürlich. :)

BTW: Klassennamen beginnen laut CodeConventions mit einem Großbuchstaben. ;)
 
Zurück