Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt?

mathilda712

Mitglied
Ich soll einen Roboter eine Methode aus einem Interface geben, so dass er sich je nachdem wie hoch der Parameter des Roboters ist bewegt. Solange der int-Wert größer gleich 0 ist, soll die Methode move( ) ausgeführt werden und wenn dieser Wert kleiner ist soll die Methode abgebrochen werden. Wie kann ich das lösen?

Meine Idee wäre eine while-Schleife, in welcher ich while x größer gleich 0, super.move( ) und dann zusätzlich eine weitere while-Schleife, welche immer dann läuft, wenn x kleiner 0 ist und dann im Abbruch dieser Schleife endet.

Macht das Sinn?
 
Keine Ahnung ob ich das richtig verstanden habe, aber eine while-Schleife klingt sinnvoll. Die Zweite verstehe ich nicht. Mach erst mal nur Eine.
 
Wie ist der Name, bzw. der komplette Header deiner Methode aus dem Interface, die du implementieren sollst?
Die zweite Schleife brauchst du wirklich nicht. Wenn du die erste abbrichst, sobald der Wert unter 0 sinkt, bleibt dein Roboter ja stehen.

ps: super.move() auszuführen ist wenig sinnvoll, da das Interface ja die Methoden nicht selbst implementiert. Ruf die Methode deiner implementierenden Klasse auf, außer natürlich du leitest außerdem von einer abstrakten Klasse ab.
 
Zuletzt bearbeitet:
Wie ist der Name, bzw. der komplette Header deiner Methode aus dem Interface, die du implementieren sollst?
Die zweite Schleife brauchst du wirklich nicht. Wenn du die erste abbrichst, sobald der Wert unter 0 sinkt, bleibt dein Roboter ja stehen.

ps: super.move() auszuführen ist wenig sinnvoll, da das Interface ja die Methoden nicht selbst implementiert. Ruf die Methode deiner implementierenden Klasse auf, außer natürlich du leitest außerdem von einer abstrakten Klasse ab.
Mein Interface sieht so aus:

Java:
public interface RepetitionRobot {

  void move (int x);
}

Meine Klasse sieht dann so aus mit Konstruktor:

Java:
public class RepetitionRobotImpl extends Robot implements RepetitionRobot {

  public RepetitionRobotImpl(int n) {
    super(0, 0, Direction.LEFT, 5); // x, y, Direction, numberOfCoins


Ich hatte jetzt mehrere Ideen für Schleifen:

Erste Idee mit einer for-Schleife:
Java:
 @Override
  public void move(int x) {
   for (int n = x; x >= 0; x++) {
     super.move();

Zweite Idee mit einer while-Schleife:
Java:
  @Override
      public void move(int x) {
    while (x >= 0) {
      super.move();
    }
    while (x < 0) {
      crash();

Aber beides scheint nicht so zu funktionieren, wie es soll. Die Anwendung läuft zwar, aber der Roboter bewegt sich zu lange. Danke!
 
Ich habe schon richtig verstanden, dass sich der Roboter x-mal bewegen soll, oder?

In deiner for-Schleife wird die Schleifenvariable n mit x initialisiert und läuft solange, wie x größer oder gleich ist wie 0.

Also für x = 10 wird n = 10 und mit jedem Schleifendurchlauf wird x um 1 erhöht. Die Schleife läuft damit ewig, weil x immer größer als 0 ist und noch weiterhin größer wird.

Warum nicht mit n bei 0 starten mit jedem Durchlauf erhöhen und die Schleife so lange laufen lassen bis x erreicht ist?


Deine while-Schleife hat das Problem, dass sie solange läuft, wie x größer oder gleich 0 ist, aber x wird nie geändert und (sofern es vorher größer als 0 war) immer größer als 0 bleiben wird.
 
Java:
  @Override
public void move(int x) {
  while (x >= 0) {
    super.move();
}
X wird hier nie reduziert, das Resultat ist eine Endlosschleife.

Java:
  @Override
public void move(int x) {
for (int n = x; x >= 0; x++) {
    super.move();
}
Ebenso wird X hier nie reduziert und wird immer > 0 sein oder zumindest so lange, bis es so groß ist (2^31), dass es zum Überlauf kommt.
 
Ich habe schon richtig verstanden, dass sich der Roboter x-mal bewegen soll, oder?

In deiner for-Schleife wird die Schleifenvariable n mit x initialisiert und läuft solange, wie x größer oder gleich ist wie 0.

Also für x = 10 wird n = 10 und mit jedem Schleifendurchlauf wird x um 1 erhöht. Die Schleife läuft damit ewig, weil x immer größer als 0 ist und noch weiterhin größer wird.

Warum nicht mit n bei 0 starten mit jedem Durchlauf erhöhen und die Schleife so lange laufen lassen bis x erreicht ist?


Deine while-Schleife hat das Problem, dass sie solange läuft, wie x größer oder gleich 0 ist, aber x wird nie geändert und (sofern es vorher größer als 0 war) immer größer als 0 bleiben wird.
Danke für die Hilfe, habs jetzt hinbekommen 🙂
 

Zurück
Oben