# Klasse Dreieck und Punkt realisieren



## Araschi (24. Mrz 2011)

Hallo, ich möchte wirklich nicht stören, doch habe ich ein schwerwiegendes Verständnis Problem bei einer Aufgabe die ich gerade Programmiere. Folgende Aufgabenstellung ist gegeben :

Realisieren Sie die Klassen Punkt und Dreieck im Package de.pdbm.programmierung.aufgabe2. Die Klasse
Punkt deniert die folgenden Methoden/Konstruktoren.
public Punkt ( double x, double y)
public double entfernung ( Punkt p)
public boolean gleich ( Punkt p, double epsilon )
public Punkt verschiebe ( double dx , double dy)
public double getX ()
public double getY ()
Punkte sollen unveranderlich sein und besitzten daher keine Setter. Auch die Methode verschiebe verschiebt
nicht den aktuellen Punkt, sondern liefert einen neuen, verschobenen Punkt zuruck. Unveranderliche Klassen
nennt man im Englischen immutable. Die Klasse String ist hierfur ein prominentes Beispiel. Als Entfernung
wird der euklidische Abstand berechnet. Die Gleichheit zweier Punkte basiert auch auf diesem Abstand.
Die Klasse Dreieck ist ebenfalls unveranderlich. Implementieren Sie die folgenden Methoden/Konstruktoren.
public Dreieck ( Punkt p1 , Punkt p2 , Punkt p3)
public double umfang ()
public double flaeche ()
public Dreieck verschiebe ( double dx , double dy)
public Punkt getP1 ()
public Punkt getP2 ()
public Punkt getP3 ()
Bei verschiedenen Berechnungen konnten Ihnen die Methoden Math.hypot() und Math.sqrt() bei der
Arbeit helfen. Ein guter Tipp fur die Flachenbereichnung eines Dreiecks ist der Satz des Heron.


Hier ist meine Klasse Punkt:


```
package de.pdbm.programmierung.aufgabe2;

public class Punkt {

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

	}
	
	public double entfernung(Punkt p){
		
		return Math.hypot(x - p.getX(),y-p.getY());
	}
	public boolean gleich(Punkt p, double epsilon){
		//entfernung vergleichen
		
		return false;		
	}
	public Punkt verschiebe(double dx , double dy){
		
		Punkt p = new Punkt(dx+x,dy+y);
		
		return p;
		
		
	}
	
	
	// GETTER
	public double getX(){
		return x;
	}
	
	public double getY(){
		return y;
	}
	
	
public static void main(String[] args) {
		
		Punkt p = new Punkt(2.3,5.5);
		
		Punkt p3 = p.verschiebe(2.0,2.0);
		System.out.println(p3.getX() + " " + p3.getY());
		
	}

}
```

Und hier die Klasse Dreieck:


```
package de.pdbm.programmierung.aufgabe2;

public class Dreieck {
	
	public Punkt p1;
	public Punkt p2;
	public Punkt p3;
	
	public Dreieck (Punkt p1 , Punkt p2 , Punkt p3){
		
		this.p1 = p1;
		this.p2 = p2;
		this.p3 = p3;
	}
	
	public double umfang (){
		double u = 0.0;
		Dreieck dre = new Dreieck(p1, p2, p3);
		u = (p1.add(p2);
		
		return u;
	}
	public double add(){
		
		
		
		return 0;
		
		
	}
	
	
	
	public double flaeche (){
		return 0;
	}
	public Dreieck verschiebe (double dx , double dy){
		return null;
		//Dreieck p = new Dreieck(dx,dy);
		//Dreieck p = new dreieck;
		//return;
	}

	// GETTER
	public Punkt getP1 (){
		return p1;
	}
	public Punkt getP2 (){
		return p2;
	}
	public Punkt getP3 (){
		return p3;
	}
	
	


}
```

Mein Problem ist wie ich die Objekte sprich p1 ... p3 addieren kann um zB den Umfang zu berechnen. F[r eine kleine Hilfestellung waere ich sehr verbunden.

mfg Araschi


----------



## SlaterB (24. Mrz 2011)

p1.entfernung(p2) liefert doch den Abstand zwischen 2 Punkten, 
ist der Umfang nicht genau die Summe der Abstände zwischen allen Punkten?


----------



## Araschi (24. Mrz 2011)

Ja der Umfang ergibt sich aus den drei Punkten, also die Aussenlinien ergeben den Umfang, das problem ist wie ich p1...p3 zusammen addieren kann. Da es ja Punkt Objekte sind


----------



## Araschi (24. Mrz 2011)

DAs Problem ist das ich dachte beim Umfang einfach nur u gleich p1+p2+p3 aber da gibt er mir folgende Fehlermeldung aus > The operator + is undefined for the argument type(s) de.pdbm.programmierung.aufgabe2.Punkt, de.pdbm.programmierung.aufgabe2.Punkt


----------



## Luke_ (24. Mrz 2011)

```
public Punkt add(Punkt p)
{
  return new Punkt(this.x + p.getX(), this.y + p.getY())
}
```

so könnte deine add funktion aussehen.... aber bekommst du damit den umfang??
ich würde den umfang auch mithilfe der entfernung berechnen.


----------



## SlaterB (24. Mrz 2011)

wie soll p1+p2+p3 irgendetwas mit der Lösung zu tun haben?
ohne Denken funktioniert Programmieren nicht

```
double abstand1 = p1.entfernung(p2);
```
hier hast du eine double-Zahl, die man addieren kann, 
mehrere solcher Zahlen brauchst du um sie dann zusammenzuzählen

irgendwas davon verstanden?


----------



## Araschi (24. Mrz 2011)

JA vielen Dank ich glaube ich habe es verstanden


----------



## WIaimy (24. Mrz 2011)

> Punkte sollen unveranderlich sein und besitzten daher keine Setter.


Würde mich für bedeuten, dass deine Variablen x und y private sein sollen. Sonst kannst du sie ja beliebig verändern...


----------



## xehpuk (25. Mrz 2011)

Nicht ganz. Es bedeutet viel eher, dass sie 
	
	
	
	





```
final
```
 sein sollen.


----------



## Marco13 (25. Mrz 2011)

Beides


----------

