# Inhalt einer Klasse vervollständigen



## Anfänger93 (14. Dez 2012)

Hi Leute, bin gerade voll am Verzweifeln;(.
Ich weiß ehrlich gesagt nicht wie ich diese Aufgabe lösen soll,deswegen bräuchte ich schnellstens eure Hilfe.


Ein Punkt in einer Ebene wird durch zwei Koordinaten x und y festgelegt. Die Objekte
der folgenden Klasse Punkt sollen Punkte einer Ebene repräsentieren. Diese Klasse besitzt
den in der Vorlesung vorgestellten typischen Aufbau einer Klasse. Vervollständigen Sie
diese Klasse:

```
public class Punkt {
// Attribute
private double x;
private double y;
private final double EPS = 0.0000001;
// Konstruktor
public Punkt(double x, double y) { ... }
// get-/set-Methoden
public double getX() { ... }
public double getY() { ... }
public void setX(double x) { ... }
public void setY(double y) { ... }
// Überlagerung von Methoden der Klasse Object
public boolean equals(Object x) { ... }
public Object clone() { ... }
public String toString() { ... }
// Anwendungen
public double abstand() { ... }
public double abstand(Punkt p) { ... }
}
```
Zwei double-Werte sollen als gleich angesehen werden, falls der Betrag ihrer Differenz
kleiner als EPS ist. Die Methode toString() soll eine Zeichenfolge der Form (x,y) liefern,
wobei x und y die Koordinaten des aktuellen Objekts sind. Die Methode abstand() soll
den Abstand des aktuellen Objekts vom Ursprung (0.0,0.0) berechnen. Die Methode
abstand(Punkt p) soll den Abstand des aktuellen Objekts vom Parameter p berechnen.

Zur Lösung dieser Aufgabe dürfen Sie Methoden der Klasse Math verwenden, aber keine
Klassen importieren. Sie können natürlich den Klassen weitere Attribute und Methoden
hinzufügen.


----------



## nillehammer (14. Dez 2012)

Bemüh mal die Forensuche. Ein Klassenkamerad/Kommolitone von Dir hat zu exakt der selben Aufgabe heute schon eien Thread aufgemacht.


----------



## Marcinek (14. Dez 2012)

Hallo,

fangen wir doch langsam an:

public double getX() { ... }

Was könnte hier wohl als Rückgabe passieren?

Gruß,

Martin


----------



## Fab1 (14. Dez 2012)

Und lass mich raten, du musst morgen deine Aufgabe abgeben, die schon seit Wochen bei dir rumliegt. Und du denkst, das jetzt hier jemand die Aufgabe für dich ohne irgendeine Gegenleistung macht?

Es ist nicht Sinn und Zweck deine Aufgaben zu lösen. Bitte poste erstmal deinen Ansatz und ein konkretes Problem deiner Aufgabe, was du daran nicht verstehst oder was Fragen aufwirft.

Wenn du trotzdem aber nur eine Lösung möchtest, dann ab damit in die Jobbörse.


----------



## Anfänger93 (14. Dez 2012)

Ich muss die Aufgabe bis Sonntag 24 Uhr abgegeben haben. Ich habe schon zwei Programme vorher geschrieben und die auch einigermaßen recht gut hinbekommen, aber diese Aufgabe überfordert mich total, weil ich nicht weiss wie ich was anzuwenden, um die Augabe zu erfüllen.

public double getX() { ... } liefert doch den Rückgabewert double x ?!

ist der Ansatz bisher richtig???

[JAVA=42]public class Punkt {
    private double x;
	private double y;    
	public Punkt (double xKoord, double yKoord) {
	    x = xKoord;
		y = yKoord;
	}
	public double getX() {
	    return x;
	}
	public double getY() {
	    return y;
	}[/code]



Gruß Anfänger93


----------



## Tomate_Salat (14. Dez 2012)

http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Besonders unter "Wenn du Fragst...". Punkt 1) und 7) lesen ;-)

Willst du einfach nur die Lösung? Dann Poste dein Anliegen nochmal hier:
Jobbörse - java-forum.org
oder bitte einen Mod, das hier zu verschieben.

Oder du bleibst beim klassischen: Du versuchst die Aufgabe selber zu lösen und postest konkrete Fragen. Je allgemeiner deine Frage ist, desdo allgemeiner wird auch die Hilfestellung hier ausfallen. Aber immer dran denken: bei der letzten Variante sollte Eigeninitiative erkennbar sein ;-)

[EDIT]


Anfänger93 hat gesagt.:


> public double getX() { ... } liefert doch den Rückgabewert double x ?!



in dem geposteten Code nicht, aber ja sollte wohl so sein ;-)
[/EDIT]


----------



## Anfänger93 (14. Dez 2012)

Ich möchte diese Aufgabe ganz gerne mit eurer Hilfe lösen. Also, jetzt zu meinen Fragen:

Ich weiß nicht wie ich an diese Aufgabe herangehen soll. Soll ich mit dieser Teilaufgabe beginnen:

Zwei double-Werte sollen als gleich angesehen werden, falls der Betrag ihrer Differenz
kleiner als EPS ist.


Gruß Anfänger93


----------



## Marcinek (14. Dez 2012)

Wenn du einen Punkt hast (1,2) und (1,2.00000001)

Du möchtest nun herausfinden ob die gleich sind, dann machst du |1-1| und |2-2.00000001|.

Raus kommt 0, 0.00000001

Dieser Punkt ist gleich den, 0 < eps und 0.00000001auch.

Gruß,

MArtin


----------



## Landei (14. Dez 2012)

Und den Betrag eines Wertes bekommst du mit [c]Math.abs(...)[/c].

[OT]
Nur so nebenbei bemerkt: Die Verwendung einer Epsilon-Umgebung bei Vergleichen ist zwar korrekt, verletzt allerdings den Kontrakt von 
	
	
	
	





```
equals()
```
, der auch Transitivität fordert: Mit Epsilon-Umgebung kann es dazu kommen, dass 
	
	
	
	





```
p1.equals(p2)
```
 und 
	
	
	
	





```
p1.equals(p3)
```
 ist, aber nicht 
	
	
	
	





```
p2.equals(p3)
```
.
[/OT]


----------



## pappawinni (14. Dez 2012)

Um herauszufinden ob zwei Punkte gleich sind, würde ich deren Abstand bewerten.
AbstandP1P2 = Wurzel ( (x1-x2)^2 + (y1-y2)^2)


----------



## pappawinni (15. Dez 2012)

So in etwa könnte die Lösung wohl aussehen.


```
class Punkt {
   private static final double EPS = 0.0000001;
   private double x;
   private double y;

   // Kontruktor für Punkt am Koordinatenursprung (0,0).
   public Punkt() {
       this.x = 0;
       this.y = 0;
   }

   // Konstruktor mit gegebenen Koordinaten.
   public Punkt(final double x, final double y) {
       this.x = x;
       this.y = y;
   }
   
   // Copy-Konstruktor
   public Punkt(Punkt p)
   {
       this.x = p.getX();
       this.y = p.getY();
   }

   // Liefert die horizontale Koordinate dieses Punktes.
   public double getX() {
       return x;
   }

   // Liefert die vertikale Koordinate dieses Punktes.
   public double getY() {
       return y;
   }

   // Setzt die horizontale Koordinate dieses Punktes.
   public void setX(double x) { 
	   this.x = x; 
   }
   
   // Setzt die vertikale Koordinate dieses Punktes.
   public void setY(double y) { 
	   this.y = y; 
   }

   private boolean isEqual(double a, double b)
   {
       return Math.abs(a-b)<EPS;
   }

   public boolean equals(Punkt p)
   {   
		  return isEqual(x, p.getX()) && isEqual(y, p.getY());
   }

   @Override
   public boolean equals(Object x)
   {   
	   if(x instanceof Punkt){
		  return equals((Punkt) x);
	   }
       return false;
   }
   
   @Override
   public Object clone() { 
	   return new Punkt(x,y); 
   }
   
   // euklidischer Abstand von (0,0)
   public double abstand() { 
	   return Math.sqrt(x*x+y*y);
   }

   // euklidischer Abstand von einem zweiten Punkt
   public double abstand(Punkt p) {
	   double dx = x - p.getX();
	   double dy = y - p.getY();
	   return Math.sqrt(dx*dx+dy*dy);	   
   }

   @Override
   public String toString()
   {
       return ("("+x+","+y+")");
   }

}
```


----------



## Marcinek (15. Dez 2012)

Obwohl man denkt, dass man den TO damit hilft, ist dem nicht so.

Gleich kommt Aufgabe 2, in der man die Eigenschaften einer geraden implmenetieren soll ;D

Dann haben wir wieder ein Posting und einen ratlosen TO. :bahnhof: Professor Struckmann kann sich schon auf kreative Erläuterungen des Testats freuen ^^

---

Noch cooler fände ich, wenn sich der TO in deiner Firma bewerben würde. :toll:

scnr


----------



## pappawinni (15. Dez 2012)

Na, dass jemand dazu etwas im Internet findet, können wir ohnehin nicht vermeiden.
Und dass jemand sich irgendwo als Programmierer bewirbt, der damit wirklich nichts anfangen kann, mag es geben.
Glücklich wird der damit dann wohl aber auch nicht.

zu Geraden:
http://www.java-forum.org/allgemeine-java-themen/139211-suche-matrix-libraries.html#post933761
oder Gerade und Punkt:
Klassen Point und Line


----------



## Anfänger93 (15. Dez 2012)

Danke für die ganze Hilfe,
jetzt muss ich das nur noch verstehen. Ich kam bzw. ich komme mit den Methoden nicht zurecht, also, ich wusste nicht wie ich die Anwenden sollte,daher hatte ich keinen schimmer was ich machen sollte und wie ich das auf den Sachverhalt anzuwenden habe. Ich bin halt noch am Anfang wenn es ums Programmieren geht, habe erst vor 2 Monaten angefangen zu programmieren, daher noch ein paar Fragen:

was hat das @0verride zu bedeuten? (das ist mir leider nicht bekannt)

Gruß Anfänger93


----------



## pappawinni (15. Dez 2012)

http://de.wikipedia.org/wiki/Annotation_(Java)

Mit @Override kann eine Methode gekennzeichnet werden, die die Methode ihrer Oberklasse überschreibt. Der Compiler stellt dann sicher, dass die Oberklasse diese Methode enthält und gibt einen Fehler aus, wenn dies nicht der Fall ist.


----------

