[JAVA] Problem mit OOP

Status
Für weitere Antworten geschlossen.

NemesisFS

Lt. Commander
Registriert
Sep. 2008
Beiträge
1.294
Hi,
in meiner aktuellen Übungsaufgabe soll ich folgendes machen:
die Klasse Raumschiffe erstellen, deren Objekte sich durch ihre x,y,z Koordinaten, ihre ID und dadurch auszeichnen, ob sie repariert werden müssen.
die Klasse Raumstationen, deren Objekte sich ebenfalls durch Koordinaten und ID sowie dadurch, ob sie belegt sind oder nicht definieren.
Außerdem sollen die Methoden fliegen und abschleppen definiert werden, mit denen sich ein Raumschiff bewegt, bzw es das Raumschiff mit den gleichen Koordinaten zu einer Raustation abschleppt.
Für die Raumstation soll die Methode reparieren definiert werden, die das Raumschiff, welches sich auf ihren Koordinaten befindet, repariert, solange sie nicht belegt ist.

Danach sollen in der main Methode (die in einer anderen Klasse steht, zumindest bei mir) Verschieden Schiffe und Stationen erzeugt werde, u.a. in einem Array, mit denen dann die Methoden getestet werden sollen. Problem ist nun folgendes: In den Methoden greife ich auf die Arrays zu. Mir fällt keine Lösung ein wie ich es anderes realisieren könnte. Aber ich weiß auch nicht, wie ich die Arrays und Objekte global verfügbar machen kann, da ausdrücklich gesagt ist, dass sie in der main Methode deklariert werden sollen...

Mein Code habe ich unter folgendem Link hochgeladen: http://nopaste.info/7a6494294c.html

wäre cool wenn ihr mir helfen könntet =)
 
hmm... verstehe dein Problem jetzt noch nicht so richtig. du hast doch jetzt in deinen arrays die stationen bzw raumschiffe.

du kannst doch jetzt die methoden ausführen indem du z.b.:

schiffe[1].fliege(10,20,30);

oder sowas benutzt.

Edit:

alles zurück! jetzt hab ich dein problem verstanden!

denke mal es geht darum, das du z.B. in abschleppen ein anderes raumschiff brauchst, das du abschleppen willst.

dann gib der methode doch einfach einen weiteren parameter vom typ raumschiff.

dann kannst du in deiner main methode die sachen so aufrufen:

schiffe[0].abschleppen(stationen[0], schiffe[1]);

also du willst mit schiff_0 das schiff_1 zur raumstation station_0 ziehen. dann kannst du deine abschleppen funktion so umschreiben, dass darin die koordinaten von schiff_1 ebenfalls geändert werden (z.b. mit deiner move funktion schiffe[1].move(x,y,z))
 
Zuletzt bearbeitet:
Code:
public class Aufgabe2
{
  public static void main(String[] args)
  {
    // ...
    
    for( int i = 0; i < schiffe.length; i++ )
    {
      schiffe[i].fliege();
      schiffe[i].abschleppen();
    }
    
    for( int i = 0; i < stationen.length; i++ )
      stationen[i].reparieren();
  }
}
Bin mir nur nicht bei der Array-Länge sicher, da müsstest du nochmal selbst nachsehen.

Du musst nur eine Schleife drumherum bauen, die jedes Element des Arrays durchläuft. Das einzelne Objekt steht dann im Array im Index i (z.B. stationen) und kannst damit ganz normal fortfahren.

In den Methoden greifst du übrigens nicht auf das Array zu, denn diese werden ja erst in der main-Methode definiert. Im Objekt selbst behandelst du auch immer nur ein einziges Objekt und nicht mehr.

edit: Parameter übersehen... Die Variante von shagg klingt aber gut, vergiss das von mir oben geschriebene.
 
Würde das genauso wie Shagg machen. Deine Methode würde dann so aussehen.
void abschleppen(Raumstation s, Raumschiff r)

Du könntest auch das ganze Array mit übergeben.
void abschleppen(Raumstation s, Raumschiff[] r)
Dann würde es bedeuten, dass ein beliebiges Schiffe das die selben Koordinaten hat das Schiff abschleppt.
 
Sind die Funktionen vorgegeben, sprich musst du dich an bestimmte Vorgaben halten oder kannst du die Übergabeparameter der Funktionen frei wählen?
Weil so ist der Code etwas ...komisch, oder ich hab den Sinn nicht verstanden. Ich würde z.B. noch bei abschleppen() oder reparieren() das Raumschiff mit übergeben.(Die jetzigen Funktionen checkt ja alle Raumschiffe)

Und nebenbei:
du fragst in reparieren(), ob die Koordinaten von einer Raumstation mit der eines Schiffes übereinstimmt:
Code:
if(this.xCord == Aufgabe2.schiffe[i].getXCord() && 
this.[COLOR="Red"]x[/COLOR]Cord == Aufgabe2.schiffe[i].get[COLOR="Red"]X[/COLOR]Cord() && 
this.[COLOR="Red"]x[/COLOR]Cord == Aufgabe2.schiffe[i].get[COLOR="Red"]X[/COLOR]Cord())
Allerdings fragst du 3mal dieselbe X-Variable ab, ich denke das ist ein Copy&Paste Fehler, weshalb du noch Y und Z brauchst ;)
 
Zuletzt bearbeitet:
Alternativ könntest du dir noch eine Klasse erzeugen, die die Raumschiffe und Stationen verwaltet. Die Instanz dieser Klasse übergibt du per Konstruktor von Raumschiff / Station und verwaltest dann diese Objekte innerhalb der Klasse Galaxy mit z.b. einer ArrayList.

Diese Methode hätte den Vorteil dass du immer feststellen kannst wieviele Schiffe z.b. an der gleichen Stelle stehen.
 
An die Lösung von Shagg hatte ich auch gedacht, nur leider ist die Aufgabe ein wenig Vage formuliert... was jedoch sicher ist, ist, dass die ganzen Objekte und Arrays in der main-methode deklariert werden müssen, dadurch fällt die Lösung, eine Klasse für globale Variablen zu schreiben weg...

Edit: Verdammt! "abschleppen und reparieren erfordern Zusatzinforationen, mit welche Raumschiff das geschehen soll."... Also soll ich das Raumschiff doch per Parameter übergeben, herausfinden, welches das ist tue ich also wirklich in der mainmethode. Vielen Dank für die Hilfe!
@Shagg: Soweit ich weiß kommt das ändern der Koordinaten beider Schiffe auch in der jetzigen Version vor:
Code:
this.move(x, y, z);
schiffe[j].move(x, y, z);

Edit2: Danke an z0tti, hätte ich wahrscheinlich übersehen^^
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben