# Objektmanipulation



## Peter201592 (31. Okt 2015)

Hey,
habe folgende Aufgabe, aber irgendwie weiß ich nicht so recht wie ich anfangen muss.

Die Klasse Punkt hat zwei private Attribute, x und y vom Typ double. Definiere einen Konstruktor der die Argumente x und y benutzt. 
Schreibe die statische Methode distanz welche die Distanz zwischen zwei Punkten berechnet und als Doublezahl zurückgibt. Signatur der Methode: public static double distanz (Punkt P1,Punkt P2)  Schreibe die nicht statische Methode distanz welche die Distanz zwischen dem aktuellen Punkt und einem Punkt als Argument zurückgibt Signatur der Methode: public double distanz (Punkt P) 
Die Distanz zwischen Punkt (x,y) und Punkt (a,b) wird berechnet mit der Formel (( a - x) 2 + (b - y)2 )1/2 Mit Math.sqrt(x)) wird die Quadratwurzel von x berechnet.

Es wäre nett wenn mir jemand beim Ansatz helfen könnte.
Danke


----------



## Crystalskull (31. Okt 2015)

Hallo Peter201592,

welche Erfahrungen bzw. Kenntnisse hast du bis jetzt in Java? Sprich, was ist dir an der Aufgabenstellung unklar? Zunächst legst du dir in einem Editor deiner Wahl (ich empfehle Eclispe) eine neue Klasse Namens "Punkt" an. Von dieser Klasse erzeugst du später Objekte. Diese Objekte haben besitzen die Instanzvariblen x und y. Ein neues Objekt einer Klasse erzeugst du mit dem Konstruktor. Dieser initialisiert die Instanzvariablen x und y. Die Referenzen auf deine Objekte der Klasse Punkt werden beim Methodenaufruf als Parameter übergeben. In den Methodenrumpf implementierst du einfach deine Formel und gibst das Ergebniss mit dem Schlüsselwort return an den Aufrufer zurück. Ich hoffe ich konnte dir weiter helfen. Wenn du möchtest kann ich dir auch Quellcode zu dieser Aufgabe schicken.

Viele Grüße

Crystalskull


----------



## Peter201592 (31. Okt 2015)

Ich verstehe das mit dem Konstruktor nicht so ganz, denn wenn ich mir Beispiele im Internet anschaue, kann ich die irgendwie nicht auf diese Aufgabe übertragen.


----------



## Crystalskull (31. Okt 2015)

Hallo Peter201592,

hier der Code zu deiner Aufgabe.


```
public class Punkt {
   
    // Instanzvariablen
    private double x;
    private double y;
   
    // Konstruktor
    public Punkt(double x, double y) {
        this.x = x;
        this.y = y;
    }
   
    // statische Klassenmethode
    public static double distanz(Punkt p1, Punkt p2) {
        // Implementierung deiner Formel und Rueckgabe des Ergebnis mit return
    }
   
    // Instanzmethode
    public double distanz(Punkt p) {
        // Implementierung deiner Formel und Rueckgabe des Ergebnis mit return
    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }
   
    public static void main(String[] args) {
        Punkt p1 = new Punkt(10, 5);
        Punkt p2 = new Punkt(4, 6);
        distanz(p1, p2);
        p1.distanz(p2);
    }
}
```

Es werden zwei Variablen vom Typ "Punkt" in der Main Methode angelegt. Diese Variablen enthalten Referenzen auf das "Punkt-Objekt". Neue Objekte werden mit dem Schlüsselwort new erzeugt, gefolgt vom Konstruktoraufruf. Die Klasse Punkt enthält lediglich den Konstruktor "Punkt(double x, double y)". Daher kann nur dieser aufgerufen werden. x erhält z.B. 10 und y 5. Innerhalb des Konstruktors werden dann die Instanzvariablen mit den Parameterwerten befüllt. Ich hoffe ich konnte dir weiter helfen.

Viele Grüße

Crystalskull


----------



## Peter201592 (31. Okt 2015)

danke schon mal dafür, aber brauche ich nicht auch noch eine Ausgabe, die mir den Abstand anzeigt, weil im Moment bringt das Programm doch gar nichts oder?


----------



## Crystalskull (31. Okt 2015)

Hallo Peter201592,

ja klar, einfach der Methode System.out.println() die gewünschte Distanz Methode übergeben. Deine Formel zur Berechnung musst du auch noch in den Methoden implementieren, im code Beispiel habe ich dies mit Kommentaren angedeutet.

Viele Grüße

Crystalskull


----------



## Peter201592 (1. Nov 2015)

```
// statische Klassenmethode
    public static double distanz(Punkt p1, Punkt p2) {
        double ergebnis = y-x;
        return ergebnis;
    }
   
  
    // Instanzmethode
    public double distanz(Punkt p) {
        double ergebnis1 = Math.sqrt((x-this.x)+(y-this.y));
        return ergebnis1;
    }
```

wie muss ich das bei der static Distanz machen?
und die Intanzmethode so richtig?


----------



## Crystalskull (1. Nov 2015)

Hallo Peter,

ich habe die Abstandsberechnung in die statische Methode implementiert, in der Instanzmethode rufe ich dann lediglich wieder die Instanzmethode zur Berechung auf.

Nachfolgend nochmal der komplette Code. Ausgegeben wird 5.09901......


```
public class Punkt {

    // Instanzvariablen
    private double x;
    private double y;

    // Konstruktor
    public Punkt(double x, double y) {
        this.x = x;
        this.y = y;
    }

    // statische Klassenmethode
    public static double distanz(Punkt p1, Punkt p2) {
        return Math.sqrt(Math.pow((p2.x - p1.x), 2) + Math.pow((p2.y - p1.y), 2));
    }

    // Instanzmethode
    public double distanz(Punkt p) {
        return distanz(this, p);
    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }

    public static void main(String[] args) {
        Punkt p1 = new Punkt(1, 2); /*
                                     * Punkt(1, 2) ist der Konstruktoraufruf, x
                                     * erhaelt den Wert 1 und y erhaelt den
                                     * Wert 2
                                     */
        Punkt p2 = new Punkt(6, 3);
        double ergebnisDistanzStatic = distanz(p1, p2);
        double ergebnisDistanz = p1.distanz(p2);
        System.out.println(ergebnisDistanzStatic);
        System.out.println(ergebnisDistanz);
    }
}
```

Viele Grüße

Crystalskull


----------



## Peter201592 (1. Nov 2015)

ok danke.
das habe ich jetzt zum größten teil auch verstanden, aber das hilft mir wahrscheinlich trotzdem nicht soviel, denn ich habe mich mit dem Datum vertan und muss morgen noch zwei andere Aufgaben aufgeben und die sind noch schlimmer.


----------

