Frage zur 11. Übung

Pibi
Erstie
Erstie
Beiträge: 19
Registriert: 18. Mai 2009 19:09

Frage zur 11. Übung

Beitrag von Pibi »

Hallo,

ich bin zwar etwas hinterher, hoffe aber, mir kann trotzdem jemand auf die Sprünge helfen.
Die 2. Aufgabe der 11. Übung verlangt einen Konstruktor ohne Parameter, der "das Attribut" initialisieren soll.....dabei soll es sich zunächst um ein Objekt der Klasse Hashset handeln.
Erwartet hätte ich sowas wie Golf(){ obengespeichertesobjekt=new Hashset() } oder so ähnlich, in der Musterlösung hab ich aber folgendes gefunden:
Golf() {
this(2);
}

Das verstehe ich nicht ganz. Was genau bedeutet es denn, wenn ich this etwas in Klammern übergebe? Dass es etwas mit den weiter unten benötigten Fällen auf sich hat, kann ich mir denken, aber das Prinzip ist mir völlig unklar. Könnte mir bitte jemand erklären, was das bedeutet? Was genau passiert denn in diesem Konstruktor, und was hat es mit dem this(2) auf sich? Und vor allem: wo sind die geforderten Generics in diesem Konstruktor?

Vielen lieben Dank im Vorraus und einen schönen Abend noch

PiBi

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Frage zur 11. Übung

Beitrag von Daniel S. »

Ich glaube das super ist falsch und müsste stattdessen this heißen. Mit super(...) wird normalerweise der Konstruktor der Super-Klasse aufgerufen. In diesem Fall soll aber der andere Konstruktor der eigenen Klasse aufgerufen werden, der darunter definiert ist und einen int als Parameter erwartet. Mit this(2); wird also der Wert 2 als Paramater an den anderen Konstruktor übergeben. Darin sind dann auch die genannten Generics zu finden.
Mit freundlichen Grüßen
Daniel

Pibi
Erstie
Erstie
Beiträge: 19
Registriert: 18. Mai 2009 19:09

Re: Frage zur 11. Übung

Beitrag von Pibi »

Danke für die schnelle Antwort......ein "super" hab ich zwar nirgendwo finden können, aber verstanden hab ichs hoffentlich trotzdem.
Bei der Klasse test() z.B., ist es richtig, dass mit this(2) die Testklasse mit dem Parameter 2 aufgerufen und abgearbeitet wird? Warum rufe ich aber nicht gleich eine Testklasse mit einem Parameter auf und gehe diesen Umweg über test()?

Zumindest soweit aber vielen Dank, das war mir wirklich unverständlich!

Eine letzte Frage habe ich noch bei folgender Methode:

public static void test(int typ) {
Golf golf = new Golf(typ);

// Schlagweiten erfassen
golf.neuerRekord(new GolfRekord("Emil Einself", 111.11));
......
}

Was bezweckt denn golfPUNKTneuerRekord? Ist das wieder eine verkürzte Schreibweise für irgendetwas? Sowas wie Rekord a=new Rekord.......aber in welcher "Variablen" wird denn dann das angelegte Objekt gespeichert? Was genau passiert denn in diesem Aufruf?

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Frage zur 11. Übung

Beitrag von Daniel S. »

Pibi hat geschrieben:Danke für die schnelle Antwort......ein "super" hab ich zwar nirgendwo finden können, aber verstanden hab ichs hoffentlich trotzdem.
Ups, wie bin ich denn auf super gekommen!? Da steht ja this. Sehr seltsam...
Bei der Klasse test() z.B., ist es richtig, dass mit this(2) die Testklasse mit dem Parameter 2 aufgerufen und abgearbeitet wird? Warum rufe ich aber nicht gleich eine Testklasse mit einem Parameter auf und gehe diesen Umweg über test()?
"test"? Welche Testklasse? Der Konstruktor Golf() verwendet einfach einen festgelegten Standardstyp (hier Typ 2) und erlaubt es die Klasse Golf zu verwenden, ohne dass man sich damit beschäftigen muss welcher Collection-Typ nun geeignet ist. Er ist somit eine Abkürzung für den (idealerweise) häufigsten Fall von Parametern für die Klasse.
Eine letzte Frage habe ich noch bei folgender Methode:

public static void test(int typ) {
Golf golf = new Golf(typ);

// Schlagweiten erfassen
golf.neuerRekord(new GolfRekord("Emil Einself", 111.11));
......
}

Was bezweckt denn golfPUNKTneuerRekord?
Es wird einfach die Methode neuerRekord der Klasse Golf aufgerufen, als Parameter wird eine Instanz der Klasse GolfRekord übergeben.
Was genau passiert denn in diesem Aufruf?
Das steht in der Klasse Golf:

Code: Alles auswählen

/**
	 * Fügt einen Spieler mit seiner Schlagweite hinzu.
	 * 
	 * @param name Name des Spielers
	 * @param distance Schlagweite des Spielers
	 */
	public void neuerRekord(GolfRekord r) {
		highscore.add(r);
	}
Die Parameter im JavaDoc scheinen aber nicht ganz zu stimmen :roll:
Mit freundlichen Grüßen
Daniel

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Frage zur 11. Übung

Beitrag von Owyn »

So, ich melde mich dann auch mal...

Der Konstruktor Golf() { this(2); } ruft wie schon gesagt den anderen Konstruktor mit dem Parameter 2 auf, das steht dann für die Verwendung eines TreeSet mit absteigender Sortierung.

Die Musterlösung ist zugegebenermaßen etwas komplexer, bietet aber dafür die Möglichkeit, die verschiedenen Stadien der Aufgabenstellung (HashSet, TreeSet, TreeSet mit Comparator...) zu testen, ohne etwas im Code zu ändern. Einfach den Konstruktor Golf(int) verwenden, um ein Objekt der Testklasse zu erzeugen. Der Konstruktor ohne Parameter ist nur der Einfachkeit halber da, falls man sich nicht mit den unterschiedlichen Parametern beschäftigen will.

Ein kleiner Fehler, den ich zusätzlich zum bereits erwähnten falschen neuerRekord-Kommentar gerade in der Musterlösung gefunden habe: In den Kommentaren zum Konstruktor ist teilweise von TreeMap statt TreeSet die Rede. Ich habe gerade eine korrigierte Musterlösung auf die Seite gestellt.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Pibi
Erstie
Erstie
Beiträge: 19
Registriert: 18. Mai 2009 19:09

Re: Frage zur 11. Übung

Beitrag von Pibi »

Vielen Dank für die Hilfe, ich denke, das ist jetzt klargeworden =)

elvire
Erstie
Erstie
Beiträge: 21
Registriert: 19. Okt 2008 07:15

Re: Frage zur 11. Übung

Beitrag von elvire »

Hallo,
ich verstehe immer nicht genau, was mit diesem "this(2)" gemeint ist.

a-nickol hat geschrieben:
"Mit this(2); wird also der Wert 2 als Paramater an den anderen Konstruktor übergeben"

Was ist dieser Konstruktor ?
Ihre Erkärungen verstehe ich auch nicht :(
Kann mir jemand das bitte noch Mal erklären?

Danke

Elvire

a_nickol
Mausschubser
Mausschubser
Beiträge: 100
Registriert: 27. Okt 2005 10:33
Kontaktdaten:

Re: Frage zur 11. Übung

Beitrag von a_nickol »

ein beispel sollte helfen:

Code: Alles auswählen

public class Test {
public Test ()
{
System.out.println("A");
this(2);
System.out.println("D");
}
public Test (int x)
{
System.out.println("B");
System.out.println("Wert " + x);
System.out.println("C");
}
new Test();

würde ausgeben:

A
B
Wert 2
C
D

das ganze geht weider nicht, da der this aufruf, der erste sein muss (im konstruktor)!

deswegen geht nur sowas wie

Code: Alles auswählen

public class Test {
public Test ()
{
this(2);
System.out.println("D");
}
public Test (int x)
{
System.out.println("B");
System.out.println("Wert " + x);
System.out.println("C");
}
B
Wert 2
C
D

elvire
Erstie
Erstie
Beiträge: 21
Registriert: 19. Okt 2008 07:15

Re: Frage zur 11. Übung

Beitrag von elvire »

Alles klar. Vielen Dank :mrgreen:

Antworten

Zurück zu „Archiv“