constructor, robot in class

superstar
Gast

constructor, robot in class

Beitrag von superstar » 9. Mär 2012 15:57

hi,
ich habe folgendes geschrieben. kann mir jemand erklären was da falsch gelaufen ist. habe leider keine lösung zu der aufgabe.

Code: Alles auswählen

class Schlaeger extends Robot {
	Schlaeger s1;
	Schlaeger s2;
	
	constructor Schlaeger(int a) {
		super(1,a,0,East);
		s1 = new Schlaeger (1,a-1,0,East);
		s2 = new Schlaeger (1,a+1,0,East);
	}
	
	void move() {
		s2.super.move();
		super.move();
		s1.super.move();
	}

task {
   Schlaeger t = new Schlaeger(3);
   //t.move();
}

(im task soll ein roboter (bei mir t) erzeugt werden. der hat zwei partner (bei mir s1 und s2) und wenn der roboter t sich jetzt bewegt sollen die beiden automatisch mitgehen)

Gast
Gast

Re: constructor, robot in class

Beitrag von Gast » 9. Mär 2012 16:18

zunächst mal kannst du nicht "s1.super.move" schreiben, weil die methode "super" für s1 nciht existiert. Damit das funktioniert musst du deine Klasse umstrukturieren (z.b. eine Methode "normalMove()" implementieren und die statt "super.move" aufrufen).

ob man im Konstruktor rekursiv auf den Konstruktor verweisen kann, weiß ich nicht, so wie du es machst, erzeugst du allerdings eine Endlosschleife, sodass du überall unendlich viele Roboter stehen hast (denn der neu erzeugte s1-schläger kriegt ja auch wieder 2 nachbarn, die nachbarn kriegen, etc...). Irgendwann geht da dann der stärkste Rechner in die Knie und deine IDE hängt sich auf.

gruß
snej

Gast
Gast

Re: constructor, robot in class

Beitrag von Gast » 9. Mär 2012 16:58

Müssen die beiden Roboter, die du erzeugst, denn vom Typ Schlaeger sein? Ich glaube, dass du Sie als
normale Robots erstellen solltest.
Außerdem weiß ich nicht, ob man "constructor" vor den Konstruker schreiben kann (man muss es jedenfalls nicht).

Falls du s1 udn s2 vom Typ Robot erzeugt hast, stört das super.move() allerdings auch nicht (es macht keinen Unterschied ob du dann s1.move() oder s1.super.move() schreibst, da das move() in der Klasse Robot nicht verändert wurde).

superstar_yo_face
Gast

Re: constructor, robot in class

Beitrag von superstar_yo_face » 9. Mär 2012 18:05

SUPER! es klappt.
lediglich der begriff constructor muss entfernt werden. und normalmove habe ich für s2 und s1 definiert.

für die die es interessiert hier der code:

Code: Alles auswählen

class Schlaeger extends Robot {
   Schlaeger s1;
   Schlaeger s2;
   
   Schlaeger(int a) {
      super(1,a,0,East);
      s1 = new Schlaeger (1,a-1,0,East);
      s2 = new Schlaeger (1,a+1,0,East);
   }
   
   void normalmove() {
   	super.move();
   }
   
   void move() {
      s2.normalmove();
      super.move();
      s1.normalmove();
   }
}

task {
   Schlaeger t = new Schlaeger(3);
   t.move();
}

snejjj
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 26. Okt 2011 11:21

Re: constructor, robot in class

Beitrag von snejjj » 9. Mär 2012 19:08

und das funktioniert wirklich?

theoretisch sollten da nämlich unendlich viele Roboter erzeugt werden....

edit: ja stimmt, da werden wirklich nur 3 Roboter erzeugt, aber warum?...

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

Re: constructor, robot in class

Beitrag von Daniel S. » 9. Mär 2012 19:16

Unter KarelJ wird immer auch der "Default"-Konstruktor mitvererbt, der hier im neuen Konstruktor für die zwei Instanzen verwendet wird.
Mit freundlichen Grüßen
Daniel

Gast
Gast

Re: constructor, robot in class

Beitrag von Gast » 9. Mär 2012 19:19

Hab es gerade mal getestet.
Es funktioniert.
Der Grund ist wohl, dass s1 und s2 mit dem Konstruktor "Schlaeger (int str, int ave, int b, direction d)" erzeugt werden. (Also der Standardkonstruktor in KarelJ)
Dieser scheint auch nach der Definition eines neuen Konstruktors "Schlaeger(int a)" zu funktionieren. Wusste ich bisher auch nicht...
Unendlich viele Roboter würden nur erzeugt werden, wenn man für s1 und s2 den neuen Konstruktor nutzen würde.

snejjj
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 26. Okt 2011 11:21

Re: constructor, robot in class

Beitrag von snejjj » 9. Mär 2012 19:19

Ah, stimmt ja, dankeschön!

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

Re: constructor, robot in class

Beitrag von Owyn » 10. Mär 2012 11:36

Wichtig für die Zukunft: Der Default-Konstruktor wird nur in KarelJ automatisch für jede Klasse erzeugt, im richtigen Java nicht mehr!

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

snejjj
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 26. Okt 2011 11:21

Re: constructor, robot in class

Beitrag von snejjj » 10. Mär 2012 18:43

das heißt, man muss den konstruktor definieren, auch wenn sich nichts ändert (und man in KarelJ also gar keinen Konstruktor definieren würde)?

oder wird wenn man keinen Konstruktor angibt, der Konstruktor der Überklasse aufgerufen?

Antworten

Zurück zu „Archiv“