Java / Greenfoot variablen übergeben?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Beim ersten erstellst du eine Methode die nichts zurückgeben soll(void), willst aber etwas zurückgeben. Das passt nicht.

Der zweite Fehler hängt wahrscheinlich damit zusammen da der nur sieht, die BALL Methode gibt nichts zurück, aber er braucht eine Ganzzahl(int) als zweiten Parameter.

MotionYTFX 
Fragesteller
 02.12.2021, 18:15

Danke schon mal … und wie muss ich es dann jeweils schreiben?

0
regex9  02.12.2021, 18:42
@MotionYTFX

Übergib der Methode setLocation als zweites Argument

Ball.getY()

Die BALL-Methode ist überflüssig.

Beachte im Übrigen Java Code-Konventionen, um deinen Code besser lesbar zu gestalten und Fehlerrisiken deutlich zu verringern. Variablennamen beginnen in der Regel mit einem Kleinbuchstaben, damit man sie von Klassen/Typnamen unterscheiden kann. In deinem Fall ist z.B. nicht sofort ersichtlich, ob Ball auf ein Objekt zeigt oder die Klasse gemeint ist. Die Methode getY könnte also vom reinen Lesen als statisch eingeschätzt werden, obwohl sie es nicht ist.

Auch bei der Benamung von Bezeichnern solltest du etwas anders verfahren. Der Name BALL beschreibt nicht das tatsächliche Verhalten, welches deine Methode implementiert hat. Es ist nicht von außen ersichtlich, dass sie doch nur eine y-Koordinate zurückgeben sollte.

1
MotionYTFX 
Fragesteller
 02.12.2021, 18:54
@regex9

das funktioniert auch nicht ... dort steht dann als Fehler: "non-static method getY() cannot be referenced from a static context"

0
regex9  02.12.2021, 19:27
@MotionYTFX

Also ist Ball eine Klasse. Genau solche Verwechslungen meinte ich im vorherigen Kommentar. Nur dein Ball-Objekt kann auf seine gebundenen Methoden zugreifen. Über den Klassennamen des Objekts geht es nicht.

Du musst der Gegner-Klasse also eine Referenz auf dein Ballobjekt überreichen.

Beispiel:

class Enemy {
  private Ball ball;

  public Enemy(Ball ball) {
    this.ball = ball;
  }

  // etc. ...
}

// at game start
Ball ball = new Ball();
Enemy enemy = new Enemy(ball);

Die Enemy-Klasse bekommt ein Feld, welches künftig auf das Ballobjekt verweisen soll. Das Objekt selbst wird beim Anlegen des Enemy-Objekts über den Konstruktor hineingereicht und in dem Feld gespeichert. Künftig kannst du (z.B. in der act-Methode von Enemy) auf den Ball und somit auch auf seine sichtbaren Methoden zugreifen (so wie in meinem ersten Kommentar beschrieben).

Irgendwann zu Programmstart, wenn du all deine Objekte einmal erstellst, musst du dein konkretes Ballobjekt an dein konkretes Enemy-Objekt übergeben.

1
MotionYTFX 
Fragesteller
 02.12.2021, 20:24
@regex9

Ja jetzt hat es endlich geklappt vielen dank

0