Frage zur 11. Übung
Frage zur 11. Übung
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
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
Re: Frage zur 11. Übung
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
Daniel
Re: Frage zur 11. Übung
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?
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?
Re: Frage zur 11. Übung
Ups, wie bin ich denn auf super gekommen!? Da steht ja this. Sehr seltsam...Pibi hat geschrieben:Danke für die schnelle Antwort......ein "super" hab ich zwar nirgendwo finden können, aber verstanden hab ichs hoffentlich trotzdem.
"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.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()?
Es wird einfach die Methode neuerRekord der Klasse Golf aufgerufen, als Parameter wird eine Instanz der Klasse GolfRekord übergeben.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?
Das steht in der Klasse Golf:Was genau passiert denn in diesem Aufruf?
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);
}

Mit freundlichen Grüßen
Daniel
Daniel
Re: Frage zur 11. Übung
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
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)
(Steven Wright)
Re: Frage zur 11. Übung
Vielen Dank für die Hilfe, ich denke, das ist jetzt klargeworden =)
Re: Frage zur 11. Übung
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
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
Re: Frage zur 11. Übung
ein beispel sollte helfen:
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
B
Wert 2
C
D
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");
}
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");
}
Wert 2
C
D
Re: Frage zur 11. Übung
Alles klar. Vielen Dank 
