Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.

PQ Discord Server: #planetquake                                                                                                                                         Spenden? Hier entlang!

Findet wer die restlichen Fehler?

Forum für alles rund ums Coden und web.design - HTML, XHTML, XML, CSS, PHP, ASP, Zugriffsrechten, Mods uvm.
Antworten
no^mis
Capture
Capture
Beiträge: 6219
Registriert: Nov 2006

Findet wer die restlichen Fehler?

Beitrag von no^mis »

Hey!

Ich hab folgenden Code, ein paar Fehler habe ich schon selber gefunden, "super" habe ich nicht wirklich verstanden, kann mir wer helfen? Inkl. Erklärung wäre super...

Code: Alles auswählen

public class Fahrzeug{
 private int maxSpeed;

 public Fahrzeug(){
  int maxSpeed;
  this.maxSpeed = maxSpeed;
  }
 
 protected int getMaxSpeed(){
  return maxSpeed;
  }

 public void move(){
  System.out.print("moves on ");
 }

 public class Landfahrzeug extends Fahrzeug{
  public void move(){
   System.out.println("moves on land");
  }
 }

 public class Wasserfahrzeug{
  public final void move(){
   super.move();
   System.out.print(" water");
 }
 } 

 public final class Traktor extends Landfahrzeug{
  public final int maxSpeed=40;

  public Traktor(){
   super();
   super.maxSpeed=this.maxSpeed;
   }
 

 public void move(){
  System.out.print("Traktor");
  this.move();
  }
 }

 public class Amphibienfahrzeug extends Landfahrzeug{
  public void move(){
   System.out.print("Amphibienfahrzeug ");
   super.move();
   System.out.print(" with " + getMaxSpeed());
  }
 }
}
Danke!
Bild

Lieber toter Rapper als lebender Singer/Songwriter!
Nomschta
Rampage
Rampage
Beiträge: 14303
Registriert: Jun 2001
Steam: TomHonks

Beitrag von Nomschta »

fehler sucht man nicht im code sondern mit breakpoints einem watchwindow und dem debugger ;)

ohne zu wissen was das ding tun soll und wie die klassen verwendet werdenkann man hier nicht viel machen. super repräsentiert wahrscheinlich die parent klasse.
BildBild Danke an Drasora für ihr Wichtelgeschenk!
MAR hat geschrieben:Führt der durch den Terrence-Hill? :ugly:
no^mis
Capture
Capture
Beiträge: 6219
Registriert: Nov 2006

Beitrag von no^mis »

ich hab auf jeden fall schon einen fehler gefunden, die Klasse Amphibienfahrzeug kann nciht von Land- UND Wasserfahrzeug erben. Fällt also eines weg!
Bild

Lieber toter Rapper als lebender Singer/Songwriter!
zeeno
Uriel
Uriel
Beiträge: 2793
Registriert: Nov 2002
Kontaktdaten:

Beitrag von zeeno »

mit "super" rufst du Funktionen der Oberklasse auf. Wie Nomschta schon sagte. Es ist zu vergleichen mit parent::foo() in PHP oder c++

Code: Alles auswählen

public class Wasserfahrzeug{
  public final void move(){
   super.move();
   System.out.print(" water");
 }
 } 
Die Klasse Wasserfahrzeuge hat kein "extends ..." also keine direkte Oberklasse. Die Oberklasse von Wasserfahrzeuge ist demnach Object. Da du super.move() aufrufst, wird er versuchen Object.move() aufzurufen. Object.move() existert aber gar nicht. Eigentlich sollte das beim Kompilieren schon einen Fehler schmeissen, aber vielleicht hast du hier das "extends Fahrzeug" einfach vergessen. :)

Code: Alles auswählen

 public void move(){
  System.out.print("Traktor");
  this.move();
  }
Du rufst in der Methode move() dieselbe Methode move() auf die der derselben Klasse gehört auf. Dies führt zu einer endlosschleife.

Das wären die Sachen nach denen ich schauen würde.
Bild

Drum & Bass: Hartes oder Weiches

"Demokratie ist, wenn man sich aussuchen kann wer verarscht." - Hagen Rether
[/CENTER]
jiggly eL
Slash
Slash
Beiträge: 640
Registriert: Aug 2009

Beitrag von jiggly eL »

Wahrscheinlich schon zu spät, aber:

Code: Alles auswählen

 public Fahrzeug(){
  int maxSpeed;
  this.maxSpeed = maxSpeed;
  }
 
Das erste, lokale maxSpeed hat keinen Wert, daher ist die Zuweisung darunter recht fragwürdig, entweder es wird gleich im Konstruktor eine maxSpeed mitgeliefert oder man könnte z.B. maxSpeed einen negativen Standardwert geben. Mit:
if(maxSpeed < 0)
{ OMG ERROR! }
könnte man dann z.B. schauen, ob alles seine Richtigkeit hat.

Code: Alles auswählen

 public final class Traktor extends Landfahrzeug{
  public final int maxSpeed=40;
[...] 
Evtl. kein Fehler, aber verwirrend, da eine der Superklassen schon ein private(!) maxSpeed hat.

Code: Alles auswählen

  public Traktor(){
   super();
   super.maxSpeed=this.maxSpeed;
   }
 
super.maxSpeed gibt es nicht, da LandFahrzeug kein maxSpeed hat - Fahrzeug hätte zwar eins, aber es ist private, daher haben wir in Traktor keinen Zugriff darauf.

Am einfachsten wäre es wahrscheinlich gewesen, den Code in Eclipse zu pasten, der hätte dir da schon die meisten Fehler angezeigt.
Antworten