# Vektor2D



## bluebaby (31. Okt 2010)

Hallo,
Ich wollt mal fragen ob die  Deklaration der Methoden laut der Aufgabe so passt. Ich bin mir bei zb.: der Methode Summe nicht sicher. Und beim Konstruktor der 3 Parameter enthalten soll kapier ich das überhaupt nicht mit kartesisch und polar.

Die Aufgabe lautet:

Erstelle eine Klasse Vektor2D, die die Attribute x und y vom Typ double besitzt. 
Folgende Methoden sollen zur Verfügung stehen:

Konstruktor ohne Parameter, der die beiden Attribute auf 1 setzt.
Konstruktor mit 3 Parametern (char, double, double)
1. Parameter hat den Wert 'k' (kartesisch), dann sind die beiden anderen Parameter für x und y
1. Parameter hat den Wert 'p' (polar), dann gibt der 2. Parameter die Länge des Vektors und der 3. Parameter den Winkel an.
1. Parameter ist weder 'k' noch 'p', dann wird der Konstruktor ohne Parameter aufgerufen.
Setter- und Gettermethoden für x und y
betrag() liefert die Länge des Vektors zurück
winkel() liefert den Winkel in Grad zurück
summe(Vektor2D) liefert die Summe der beiden Vektoren in einem Objekt vom Typ Vektor2D zurück
Test die Klasse Vektor2D mit einer eigenen Testklasse. Dokumentiere die Ergebnisse.
Achtung: Teste alle möglichen Fälle!

Ich verstehe überhaupt nicht was ich bei diesem Teil machen soll :
Konstruktor mit 3 Parametern (char, double, double)
1. Parameter hat den Wert 'k' (kartesisch), dann sind die beiden anderen Parameter für x und y
1. Parameter hat den Wert 'p' (polar), dann gibt der 2. Parameter die Länge des Vektors und der 3. Parameter den Winkel an.
1. Parameter ist weder 'k' noch 'p', dann wird der Konstruktor ohne Parameter aufgerufen.

Hab bis jetzt das geschrieben:


```
public class Vektor2D{
    private double x;     // Attribut für den Vektor (waagrecht)
    private double y;     // Attribut für den Vektor (senkrecht)
    
    public Vektor2D(){ // Konstruktor ohne Paramter, setzt die x und y Werte.
        x=1;
        y=1; 
    }                           
    public Vektor2D(char a, double x, double y){ // Konstruktor der k für Kartesisch,x und y.
       
    } 
                          // 2 Paramter ist die länge des Vektors und der 3Paramter gibt den Winkel an.
                          // Ist es weder k noch p dann wird der leere Konsturuktor Aufgerufen.
    public void setX(double x){// setzt die x und y Werte
    }
    public void setY(double y){ // setzt die y Werte
    }                        
    public void getX(double x){  // Gibt die x Werte zurück
    }                   
    public void getY(double y){  // Gibt die y Werte zurück
    }
    public void betrag(){    // Liefert die Länge des Vektors
    }                       
    public void winkel(){  // Liefert den Winkel des Vektors
    }                        
    public void summe(){ // Liefert die Summe zweier Vektoren
    }                                  
   }
```
Vielen Dank im Voraus


----------



## SlaterB (31. Okt 2010)

wenn der erste Parameter 'k' ist bedeutet in Code
> if (a == 'k') {
> ..
> }
dann sollst du was mit den anderen beiden Parametern machen, ist das so schwer?
wobei am Ende 'Konstruktor ohne Parameter aufrufen' wirklich schwer wird, denn man einen anderen Konstrukur nur als ersten Aufruf aufrufen, if vorher geht nicht,
mach dann einfach genau das was du auch im Konstruktor ohne Parameter machst


----------



## bluebaby (2. Nov 2010)

SlaterB hat gesagt.:


> wenn der erste Parameter 'k' ist bedeutet in Code
> > if (a == 'k') {
> > ..
> > }
> ...



Ok Danke,
Ich habe jetzt das mit der 'k' Eingabe geschafft, was ich nicht verstehe bei der`p`Eingabe ist, soll ich einfach den Winkel und die länge von User einlesen lassen oder soll ich es berechnen lassen?


----------



## SlaterB (2. Nov 2010)

nicht so kompliziert denken, es steht doch alles da:
bei 'p' sollen die beiden weiteren Parameter Länge und Winkel sein, nicht mehr und nicht weniger gibt es an dieser Stelle zu bedenken,
wer diese Daten wo eingibt oder berechnet ist dir erstmal egal, darüber muss sich der Aufrufer des Konstruktors den Kopf zerbrechen (vielleicht du später),
der Konstruktor ist nur dafür da diese Daten anzunehmen

durchaus direkt im Anschluss stellt sich die Frage, was mit den Daten im Vector zu machen ist, 
irgendwann muss wohl auf x + y umgerechnet werden damit alle anderen Methoden funktionieren,
diese Umrechnung kann wahrscheinlich direkt im Konstruktor geschehen, also etwas Arbeit zu erledigen

du musst nicht Winkel + Länge aus x + y berechnen, andersrum aber wohl doch


----------



## bluebaby (7. Nov 2010)

Hallo,
Vielen Dank für deine Hilfe, ich hab da noch eine Frage und zwar beim Aufrufen des leeren Konstruktors. Erstens wie soll ich den am besten Aufrufen (einfach ein normaler Aufruf innerhalb einer Klasse? oder erst in der Test klasse Aufrufen?) und zweitens wie kann ich die Bedingung so stellen das wenn der Buchstabe weder 'k' noch 'p`ist? wie mach ich das dann mit den ganzen Buchstaben und Zahlen?


----------



## bluebaby (7. Nov 2010)

Hallo,
Ich komme gerade nicht weiter mir fehlt eigentlich nur noch der Aufruf von dem leeren Konstruktor und die summe(Vektor2D) Methode.
Ich weiß zwar nicht ob das jetzt so stimmt der Rest aber hier ist der Code.

```
public class Vektor2D{
    private double x;     // Attribut für den Vektor (waagrecht)
    private double y;     // Attribut für den Vektor (senkrecht)
    double winkel;
    double länge;
    
    public Vektor2D(){ // Konstruktor ohne Paramter, setzt die x und y Werte.
        x=1;
        y=1; 
    }                           
    public Vektor2D(char a, double x, double y){ // Konstruktor der k für Kartesisch,x und y.
       if(a=='k' || a=='K' ){
       this.x=x;
       this.y=y;
      }
      if(a=='p' || a=='P'){
        this.x=winkel;
        this.y=länge;
      }

      
          
      } 
                          // 2 Paramter ist die länge des Vektors und der 3Paramter gibt den Winkel an.
                          // Ist es weder k noch p dann wird der leere Konsturuktor Aufgerufen.
    public void setX(double x){
        x=10;// setzt die x und y Werte
    }
    public void setY(double y){
        y=5;// setzt die y Werte
    }                        
    public double getX(){
        return x;// Gibt die x Werte zurück
    }                   
    public double getY(){
        return y;// Gibt die y Werte zurück
    }
    public double betrag(double x, double y){
        double betrag;
        betrag=Math.sqrt(x*x+y*y);
        return betrag;// Liefert die Länge des Vektors
    }                     
    public void winkel(double x, double y){
        double winkel;
        winkel=Math.atan(y/x);
        x=Math.sqrt(x*x+y*y)*Math.cos(winkel);
        y=Math.sqrt(x*x+y*y)*Math.sin(winkel); // Liefert den Winkel des Vektors
    }                        
   
        
        
   }
```

Bitte um Hilfe ich will endlich diese Aufgabe hinter mir haben : D


----------



## SlaterB (8. Nov 2010)

wie gesagt kann man andere Konstruktoren nur als aller ersten Befehl im Konstruktor aufrufen, wäre dann
this();

wie gesagt bin ich dafür im finalen else-Fall die Befehle des leeren Konstruktors zu wiederholen:
x=1;
        y=1;


---

if (..) {
1. Fall
} else if (...) {
2. Fall
} else {
alles andere
}


----------



## bone2 (8. Nov 2010)

```
public Vektor2D(char a, double x, double y){ // Konstruktor der k für Kartesisch,x und y.
        if(a=='k' || a=='K' ){
            this.x=x;
            this.y=y;
            this.param = 'k';
        }
        else if(a=='p' || a=='P'){
            this.länge=x;
            this.winkel=y;
            this.param = 'p';
        }
        else {
            this.x=1;
            this.y=1;
            this.param = 'k';
        }
    }
```
param als char oben noch mitnehmen. in winkel() udn betrag() dann abfragen und unterschiedliche formeln für die berechnung nehmen. alternativ die fehlenden x/y oder winkel/länge werte direkt im konstruktor noch ausrechnen und zuweisen. länge zb hat man ja bei 'p' direkt gegeben und bei 'k' kann man sie leicht ausrechnen


----------

