Methoden Attribute der übergebenen Instanzen vertauschen

blabla89

Mitglied
Hallo,
ich bräuchte etwas Hilfe bei einer kleineren Aufgabe. Der meiste Quellcode ist verfasst.
Jetzt soll ich die bereits geschriebene Klasse "Geometrie3D" um eine öffentlich statische Methode "tausche(Geometrie3D geo1, Geometrie3D geo2)" erweitern, wo ich die Attribute "refPunkt" und "h" der übergebenen Geometrie3D-Instanzen tauschen soll. Es soll die entsprechende get/set methode und je eine hilfsvariable benutzt werden.
Weiterhin soll ich eine Klasse "Test" mit einer main Methode erstellen und zwei Geometrie-Objekte erzeugen und der Methode "tausche" übergeben.
Bisher habe ich das, weis aber nicht um die Richtigkeit und das weitere Vorgehen.

public tausche(Geometrie3D geo1, Geometrie3D geo2){
double hv = geo1.getRefPunkt();
this.geo2 = geo1.getH()
this.geo1 = hv;
}

Vielen Dank
 

Meniskusschaden

Top Contributor
Nein, das ist falsch. Es ist eine statische Methode gefordert. Deine ist nicht statisch. Ausserdem ergibt this innerhalb von statischen Methoden keinen Sinn. Du solltest auch bei den Zuweisungen einmal genau überlegen, was du da miteinander vertauschen willst. Die linke und rechte Seite vom Gleichheitszeichen müssen zumindest zuweisungskompatibel sein.
 

Meniskusschaden

Top Contributor
Eigentlich steht schon alles in der Aufgabenstellung: du änderst deine Methode so, dass sie statisch ist. Im Methodenrumpf liest du die Attribute des ersten Geometrie3D-Objektes und speicherst sie in den Hilfsvariablen zwischen, dann schreibst du die Attribute des zweiten Objekts in das erste Objekt und schließlich schreibst du die zwischengespeicherten Werte in die Attribute des zweiten Objekts.
 

blabla89

Mitglied
public static void tausche(Geometrie3D geo1, Geometrie3D geo2){
double hv1 = geo1.getRefPunkt();
double hv2 = geo1.getH();
geo1 = geo2;
geo2 = hv1.setRefPunkt();
geo2 = hv2.setH();
}

wie sieht das damit aus?
Danke für deine Hilfe
 
K

kneitzel

Gast
Probier es doch einfach einmal aus. Was passiert denn bei Deiner tausche Funktion?

Du hast Da noch einen Fehler drin, den Du beim Ausprobieren bestimmt auch schnell finden wirst.
 
K

kneitzel

Gast
Dann eine kleine Erläuterung bezüglich Referenz-Variablen:

Wenn Du etwas wie "car1 = car2;" hast, bei dem car1 und car2 Instanzen einer Klasse sind, dann wird hier lediglich die Referenz (Also sozusagen eine Art "Zeiger"). Bei der Anweisung wird also die Instanz des Objekts, auf die car1 verweist, nicht geändert sondern car1 verweist lediglich nun auf car2.

Hilft Dir dies jetzt weiter?
 
K

kneitzel

Gast
Was ist den == für eine Aktion? Das ist doch keine Zuweisung mehr.

Du hast einzelne Attribute mittels der Getter gelesen und in lokalen Variablen gespeichert.
Die Zuweisung der Referenz als auch die Nutzung der Setter sind dann leider so noch nicht korrekt.
Ersteres war vom Code her übersetzbar, aber tat leider nicht das, was es machen sollte. Die Nutzung der Setter ist vom Gedanken her richtig. Hier musst Du nur den Aufruf richtig machen.

Die Kernidee beim Tausch ist ja:
Die Werte aus dem ersten Objekt liest Du per Getter und speicherst diese in lokalen Variablen.
Die Werte aus dem ersten Objekt kannst Du nun setzen (Setter, "überschreiben") mit Werten aus dem zweiten Objekt, die Du per Getter lesen kannst.
Und als letzten Schritt setzt Du die Werte im zweiten Objekt mit den Werten der lokalen Variablen.
 

blabla89

Mitglied
Tut mit Leid, dass ich da etwas Begriffsstutzig bin.
Meinst du, du kannst deinen Code dafür mal posten, damit ich diesen Anhand deiner Beschreibung nachvollziehen kann? Wäre sehr nett
 
K

kneitzel

Gast
Eine mögliche Tausch-Funktion könnte sein:
Code:
public class TestData {
  private int value;
  public int getValue() { return value; }
  public void setValue(int value) { this.value = value; }

  public static void tausche(TestData data1, TestData data2) {
    int temp = data1.getValue();
    data1.setValue(data2.getValue());
    data2.setValue(temp);
  }
}
So in der Art - einfach mal so direkt hier eingetippt.

Konrad
 

Neue Themen


Oben