Übungsaufgabe aus Java Buch bringt Fehler.

NurTee

Mitglied
Hallo liebe Kaffee Bohnen Gemeinde,

ich bin neu im Bereich der Programmiersprachen und arbeite mich in Java ein. Zu diesem Zweck, hab ich mir ein Java Buch gekauft in dem im Kapitel "Arrays" eine kleine Übung angegeben ist.

Trotz -so denke ich- 1:1 Übernahme des Codes, gibt Eclipse einen Fehler aus, der laut Buch so nicht auftreten dürfte.

Hier mal der Quelltext:


Java:
public class Übungscode 
{
	
	public static void main(String[] args)
	{
		String[][] namen =  //namen ist der "Platzhalter" bzw. "Link"
		{
			{
				"Frau", "Herr" // Index 0
			},
			{
				"Mäuserich", "Enterich", "Gänserich" //Index 1
			},
			{	
				"Daisy", "Donald", "Dagobert", "Mickey", "Minni", "Gustav" //Index 2
			},
			{
				"Duck", "Mouse", "Ganz"	//Index 3
			}
		};
			System.out.println(namen[0][1] + " " + namen[1][1] + " "+ namen[2][1] + " " + namen[3][0]);//"" würde ausgeben >DonaldDuck< 
								  //Mit oder ohne Semikolon, es läuft. Komma ergibt jedoch einen Fehler. " "mit Leerzeichen = >Donald Duck< 
	
		int[][] dreieck = new int[5][];//5 Zeilen, zweites[], keine Ahnung was drin.
		
				dreieck[0] = new int[1];//Zeile 1 = Zeile 0, zweites[] gibt die Anzahl der Werte an, jedoch nicht die Zahl an sich.
				dreieck[2] = new int[3];
				dreieck[2][1] = 2;//Zeile 3, Index-also Wert#2, ist die Zahl 2!Achtung:Kein []!!!
		
	
				System.out.println(dreieck.length);//Direkter Bezug auf new int[5][], da könnte jede Zahl im Bereich des "int" erscheinen.Null Berechnung.
				System.out.println("Anzahl der Elemente = " + dreieck[0].length);	
				System.out.println("Anzahl der Elemente = " + dreieck[1].length);
				System.out.println("Anzahl der Elemente = " + dreieck[2].length);
				System.out.println("Anzahl der Elemente = " + dreieck[3].length);
				System.out.println("Anzahl der Elemente = " + dreieck[4].length);
	};//Achtung:Die geschweifte Klammer muss zum "main" Argument passen, sonst Fehler, da ende!!!
};


Fehlercode:
Herr Enterich Donald Duck
5
Exception in thread "main" Anzahl der Elemente = 1
java.lang.NullPointerException
at Übungscode.main(Übungscode.java:34)



Laut dem Buch, sollte in der Konsole 1,2,3,4 und 5 für die Anzahl der Elemente ausgegeben werden.

Bin für eure Ratschläge dankbar.:rtfm:
 
Das Array dreieck ist an den Indizes 1, 3 und 4 jeweils null. Ein Aufruf einer Methode bzw. (in diesem Fall) einer Variablen an einer null-Referenz führt zu einer NullPointerException. Die null-Referenzen kommen daher, dass in dem Array wiederum Arrays stecken. Arrays sind Objekte. D.h. bei der Initialisierung des Arrays dreieck erhalten alle Elemente ihren Standardwert, der bei Objekten eben null ist. Erst wenn du einem Element in dreieck ein Objekt zuweist, kannst du darauf auch Methoden aufrufen.
Also z.B. so:
Java:
dreieck[1] = new int[3];
dreieck[3] = new int[5];
dreieck[4] = new int[99];
 
Zuletzt bearbeitet von einem Moderator:
Also, wenn ich dich richtig verstehe, so ist mit der obigen Ausgabe immer ein "nullexception" der Fall, weil schlicht Java keine Werte bekommt.

Ich selbst hab die Werte einmal eingetragen mit ein paar extra Zeilen...dann funktioniert es. Leider verlangt mein Buch genau obigen Code...das wiederum bedeutet, mein Buch ist fehlerhaft.😳
 
Also, wenn ich dich richtig verstehe, so ist mit der obigen Ausgabe immer ein "nullexception" der Fall, weil schlicht Java keine Werte bekommt.
Etwas schräg formuliert, aber mir scheint, du weißt, was gemeint ist. null-Referenz bedeutet, dass einer Referenz kein Objekt zugewiesen wurde. Kein Objekt --> kein Methoden-/Variablenaufruf möglich.
Der Unterschied sieht beispielhaft so aus:
Java:
dreieck[0] = new int[1];
dreieck[1] = null;

System.out.println(dreieck[0].length);
System.out.println(dreieck[1].length);
Der zweite sysout-Aufruf führt zu einer NullPointerException.
Ich selbst hab die Werte einmal eingetragen mit ein paar extra Zeilen...dann funktioniert es. Leider verlangt mein Buch genau obigen Code...das wiederum bedeutet, mein Buch ist fehlerhaft.😳
Kommt vor. Viele Bücher sind schlecht redigiert. Ist mir kürzlich wieder bei Literatur zur Vorbereitung auf ein Java-Zertifikat aufgefallen. Ich hoffe, dein Buch war nicht allzu teuer ...
 
Naja....29,90 € bei Amazon. Erst wollte ich direkt auf englische Bücher zurückgreifen, doch mein Buch hier hatte viele gute Bewertungen erhalten.

Prinzipiell ist es mir egal, was ein Buch kostet, ob deutsch oder englisch....hauptsache es ist gut.
 
Ich kann dir wenn es um Fachliteratur geht JAVA - Von Kopf bis Fuß empfehlen, ich habe selbst ewig gewartet bis ich mich für eines entschieden hatte, und damit machst du an sich nichts verkehrt.

@fisherman

Zu deinem Zertifikat mal eine kleine Frage, OCA ?
Und wenn ja , ich möchte mich gegen ende des Jahres Zertifizieren lassen, hast du einen Überblick darüber welche Themenbereiche abgedeckt werden müssen ?
Würde mich brennend interessieren, da ich mich einzig und allein Privat und in Eigenregie darauf vorbereite.

@TO

Welches Buch hast du dir denn gekauft ? rein Interesse halber.
 
@KaoZ

Das Buch heisst "Einführung in Java mit BlueJ" vom Galileo-Computing. BlueJ hab ich jedoch schnell verbannt....einmal ein Fehler im Code platziert und schon bekomme ich so seltsame Grafikfehler in der GUI und es stürtzt ab.

Aktuell hab ich Eclipse Kepler.


Hier nochmal der korrigierte Code ohne die Namen:

Java:
public class Übungscode 
{
	public static void main(String[] args)
	{
		
		int[][] dreieck = new int[5][];//5 Zeilen, zweites[], keine Ahnung was drin.Wenn im 2ten [] etwas drinsteht, hat es keinen Einfluss auf die Konsolen Ausgabe.
		{
				dreieck[0] = new int[1];//Zeile 1 = Zeile 0, zweites[] gibt die Anzahl der Werte an, jedoch nicht die Zahl an sich.
				dreieck[1] = new int[2];
				dreieck[2] = new int[3];
				dreieck[2][1] = 2;//Zeile 3, Index-also Wert#2, ist die Zahl 2!Achtung:Kein []!!! In der Aufgabe wird diese Zeile nicht genutzt!
				dreieck[3] = new int[4];
				dreieck[4] = new int[5];
	
				System.out.println("Zeilenanzahl: " + dreieck.length);//Direkter Bezug auf new int[5][], da könnte jede Zahl im Bereich des "int" erscheinen.Null Berechnung.Mit einem extra Wort macht das alles mehr Sinn in der Konsolen Ausgabe.
				System.out.println("Anzahl der Elemente = " + dreieck[0].length);	
				System.out.println("Anzahl der Elemente = " + dreieck[1].length);
				System.out.println("Anzahl der Elemente = " + dreieck[2].length);
				System.out.println("Anzahl der Elemente = " + dreieck[3].length);
				System.out.println("Anzahl der Elemente = " + dreieck[4].length); //Fehler im Buch, das magische Dreieck wird anscheinend nicht berechnet.
		};	
	};//Achtung:Die geschweifte Klammer muss zum "main" Argument passen, sonst Fehler, da ende!!!
};

Zeile 11 ist defakto unnütz! Bei dieser Beispiel Aufgabe geht es um ein magisches Dreieck. Bis jetzt, ist der obige Code nichts anderes als eine art Excell Tabelle die in einer Zelle einen Vergleichswert abfragt (so in etwa). Also Java löst das magische Dreieck hier nicht. Sollte das Buch später bezug auf die Aufgabe nehmen, so werd ich es hier posten.

OffTopic:

Weiss jemand, wie man die Symbole in Eclipse Kepler vergössert? Mein Monitor ist riesig 27" mit 2560*1440...
 
Zuletzt bearbeitet:
Ich habe mich mit BlueJ nie befasst , sondern bin gleich mich Eclipse als IDE eingestiegen, was anscheinend auch kein Fehler war wenn ich das so lese 😀
 
@fisherman

Zu deinem Zertifikat mal eine kleine Frage, OCA ?
Und wenn ja , ich möchte mich gegen ende des Jahres Zertifizieren lassen, hast du einen Überblick darüber welche Themenbereiche abgedeckt werden müssen ?
Würde mich brennend interessieren, da ich mich einzig und allein Privat und in Eigenregie darauf vorbereite.

Ja, OCA Java SE 7 Programmer (Prüfung 1Z0-803).

Die Themenbereiche für dieses Zertifikat findest du bei Oracle.
Für die Anmeldung zu einer Prüfung benötigst du ein Konto auf der Oracle-Seite und bei Pearson Vue. Bei letzterem kannst du Prüfungsorte und -zeiten herausfinden und buchen.
Alles teilweise etwas umständlich und aufwendig, und die Oracle-Seite gewinnt sicher auch keinen Preis für Benutzerfreundlichkeit. Aber mit Beharrlichkeit kommt man durch.

Als Literatur kann ich dir
OCA Java SE 7 Programmer I Certification Guide von Mala Gupta
empfehlen. Sehr systematisch und übersichtlich aufgebaut, in relativ einfachem Englisch geschrieben, bleibt beim Thema.
Nicht jedermanns Sache, manche bevorzugen
OCA Java SE 7 Programmer I Study Guide (Exam 1Z0-803) von Robert Liguori (Oracle Press).
Da hat's aber ein paar Fehler drin, für mein Empfinden etwas konfus geschrieben. Deckt auch Themen ab, die für die Prüfung irrelevant sind, finde ich ablenkend.

Ein teurer Vorbereitungskurs ist m.E. überflüssig. Ausführliche Beschäftigung mit Literatur, Prüfungsfragen (es gibt auch ganze Bücher nur mit Prüfungsfragen) und Ausprobieren am heimischen Rechner reicht.
 
Als Literatur kann ich dir
OCA Java SE 7 Programmer I Certification Guide von Mala Gupta
empfehlen. Sehr systematisch und übersichtlich aufgebaut, in relativ einfachem Englisch geschrieben, bleibt beim Thema.

Da kann ich vollkommen zustimmen!

@Fisherman: Hast du auch Buchempfehlungen für die OCP Java SE 7 Programmer (Prüfung 1Z0-804).

Kennst du
Kathy Sierra / Bert Bates: SCJP Sun Certified Programmer for Java 6 Study Guide (Die Version für Java 7 von Kathy Sierra wird ja immer weiter verschoben!)

S G Ganesh / Tushar Sharma: Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 and 1Z0-805
 
@Fisherman: Hast du auch Buchempfehlungen für die OCP Java SE 7 Programmer (Prüfung 1Z0-804).
Nein, leider nicht, mit dieser Prüfung habe ich mich noch nicht genauer beschäftigt.
Kennst du
Kathy Sierra / Bert Bates: SCJP Sun Certified Programmer for Java 6 Study Guide
Ja, ist aber für eine andere (veraltete) 5er oder 6er Prüfung. Oracle ändert die Zertifizierungspfade von Zeit zu Zeit. Nicht immer so, dass man noch durchblickt. Sierra und Bates schreiben gut, insbesondere Sierra hat in der Java-Community wohl einige Meriten erworben. Mir scheint aber besser, sich auf mindestens Java 7 zu konzentrieren, nachdem Java 8 schon seit einer Woche draußen ist.
S G Ganesh / Tushar Sharma: Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 and 1Z0-805
Habe ich nur mal reingeschnuppert, kann ich nix dazu sagen.

Falls du das weiterdiskutieren willst, schlage ich einen neuen Thread vor, damit der hier nicht komplett off topic wird.
 

Zurück
Oben