Forum / Grundlagen des Programmierens / 2. Hausübung

2. Hausübung

Hallo Leute!

Hat sich von euch schon jemand die Bsp aus dem Rep angschaut??? Soweit ich weiß hat der Tutor gemeint dass er diese mit Kommentaren versieht um diese verständlicher zu machen, oder irre ich mich???

mfg

Wolfgang ±0

hmm.. wenn immer 3 3 rauskommt, hat jeder Vektor die Koordinate 1|1 . Hast du irgendwo die Variablen die x=1 und y=1 setzen in deiner Vektor2D class, die dir da vielleicht dazwischenfummeln ?

Georg ±0

So hier nochmal der ganze Programmcode. er läuft einwandfrei ab, übernimmt mir aber bei der addition nicht die werte für x und liefert deswegen immer den vektor 3 3 her:

  double x;
          double y;
  Vektor2D()
 {
 x =1;
 y=1;
 }
 Vektor2D(double x, double y){
       
            this.x= x;
            this.y= y;
 }
  public static double Berechnunglänge(double x, double y)
  {
   return Math.sqrt(x*x+y*y);
  }
 public  Vektor2D Addition(Vektor2D x1, Vektor2D x2, Vektor2D x3)
        
 {  
  Vektor2D Vadd = new Vektor2D();
    Vadd.x = x1.x+x2.x+x3.y;
    Vadd.y = x1.y + x2.y + x3.y;
    
      return  Vadd;
 }

 public static void main(String[] args)
 {

 Scanner sc = new Scanner(System.in);
  String wahl;
  Vektor2D V1 = new Vektor2D();
  Vektor2D V2 = new Vektor2D();
  Vektor2D V3 = new Vektor2D();
  Vektor2D NeuesObjekt = new Vektor2D();
  NeuesObjekt = NeuesObjekt.Addition(V1, V2, V3);
  
     System.out.println("Geben Sie die X-Koordinate des 1. Vektors ein: ");
     V1.x = sc.nextDouble();
     System.out.println("Geben Sie die Y-Koordinate des 1. Vektors ein: ");
     V1.y = sc.nextDouble();
     System.out.println("Geben Sie die X-Koordinate des 2. Vektors ein: ");
     V2.x = sc.nextDouble();
     System.out.println("Geben Sie die Y-Koordinate des 2. Vektors ein: ");
     V2.y = sc.nextDouble();
     System.out.println("Geben Sie die X-Koordinate des 3. Vektors ein: ");
     V3.x = sc.nextDouble();
     System.out.println("Geben Sie die X-Koordinate des 3. Vektors ein: ");
     V3.y = sc.nextDouble();
     System.out.println("Wählen Sie die gwünschte Rechenoperation: "
                       + "\nLänge der einzlenenVektoren: L"
                       + "\nAddition der 3 Vektoren: A"
                       + "\nLänge des Vektors nach Addition der 3 Vektoren: S");
 wahl = sc.next();
 
 switch(wahl.toLowerCase())
 {
  case "l":System.out.println(
           "Die Länge des 1. Vektors beträgt: " + Berechnunglänge(V1.x, V1.y) +
           "\nDie Länge des 2. Vektors beträgt: " + Berechnunglänge(V2.x, V2.y)+
           "\nDie Länge des 3. Vektors beträgt: " + Berechnunglänge(V3.x,V3.y));
            break;
 case "a": System.out.println("Die Koordinaten des addierten Vektors lauten: " + 
         NeuesObjekt.x +"|" + NeuesObjekt.y);     break;
 case "s": System.out.println( "Die Länge des addierten Vektors beträgt: ");
            break;
 default: System.out.println("Falsche Eingabe, Programm wird beendet"); 
          System.exit(0);
 }
 }
}


  \n~~~
Wolfgang ±0

hmm, dein Programm läuft zwar, aber du hast es vom Aufbau her nicht so wie es lt. Aufgabenstellung notwendig wäre.

Man soll eine zusätzliche Vektor2D.class erstellen, neben der normalen Bsp2_XXXXX_2.class. Wobei es egal ist ob die Vektor2D.class ein eigenes File ist oder in der Bsp2_XXXXX_2.class enthalten ist.

So hab ich es jedenfalls verstanden und aus dem was die Tutoren geschrieben haben interpretiert.

Bei der Additions-Method übergibst du auch keine Objekte, weshalb das Programm wahrscheinlich die x=1, y=1 Werte nimmt, weil du ja nur eine Klasse hast. Grundsätzlich sollten bei den Berechnungen nur Objekte und keine Werte übergeben werden.

Martin ±0

So Hier mal mein Beispiel 2.1:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author admin
 */
public class Bsp2_1_1127976_2 {
    public static void main(String[] args)
    {
        float[] R= new float[2];
        Scanner s= new Scanner(System.in);
        System.out.print("Dieses Programm berechnet die Flaeche "
                + "\nund den Umfang eines Recktecks"
                + "\nBitte geben sie nun die erste Seitenlaenge ein: ");
        R[0]=s.nextFloat();
        System.out.print("\nBitte geben sie nun die zweite Seitenlaenge ein: ");
        R[1]=s.nextFloat();
        System.out.println("Die Flaeche des Rechtecks betraegt: " + Flaeche(R));
        System.out.println("Der Umfang des Rechtecks betraegt:  " + Umfang(R));
    }
    
    public static float Flaeche(float[] R){
        return (R[0]*R[1]);
    }
    public static float Umfang(float[] R){
        return (2*R[0]+2*R[1]);
    }
}
\n~~~

Mein Beispiel 2.2:

~~~\nimport java.io.InputStream;
import java.util.Scanner;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 *
 * @author admin
 */
public class Bsp2_2_1127976_2 {
    public static void main(String[] args)
    {
        Scanner s= new Scanner(System.in);
        Vektor2D V1= new Vektor2D ();
        Vektor2D V2= new Vektor2D ();
        Vektor2D V3= new Vektor2D ();
        
        System.out.print("Dieses Programm errechnet Ihnen die Laenge von 3 Vektoren eineln, "
                + "\nund die Laenge der 3 addierten Vektoren!"
                
                + "\nGeben sie nun die x-Koordinate des 1. Vektors ein: ");
        V1.x=s.nextDouble();
        System.out.print("                             Nun die y-Koordinate: ");
        V1.y=s.nextDouble();
        
        System.out.print("\nGeben sie nun die x-Koordinate des 2. Vektors ein: ");
        V2.x=s.nextDouble();
        System.out.print("                             Nun die y-Koordinate: ");
        V2.y=s.nextDouble();
        
        System.out.print("\nGeben sie nun die x-Koordinate des 3. Vektors ein: ");
        V3.x=s.nextDouble();
        System.out.print("                             Nun die y-Koordinate: ");
        V3.y=s.nextDouble();
        
        System.out.println("\n\nLV1= " + V1.Laenge()+ ""
                + "\nLV2= " + V2.Laenge() + ""
                + "\nLV3= "+V3.Laenge() + ""
                + "\nLVA= "+(V3.Vektoraddition(V1.Vektoraddition(V2))).Laenge());
    }

   
}
class Vektor2D {
    double x,y;
    
    Vektor2D (){
        x=1;
        y=1;
    }
    
    Vektor2D(double xx,double yy){
        x=xx;
        y=yy;
    }
    
    Vektor2D Vektoraddition (Vektor2D Vektor2){
        Vektor2D Vektorsumme;
        Vektorsumme= new Vektor2D();
        Vektorsumme.x=x+Vektor2.x;
        Vektorsumme.y=y+Vektor2.y;
        return Vektorsumme;             
    }
    
    double Laenge (){
        double Vektorlaenge;
        Vektorlaenge = Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
        return Vektorlaenge;
    }

}\n~~~

Mein Beispiel 2.3 (Aber mit vorbehalten.. es funktioniert zwar, aaaaber ich glaub nicht, dass es so richtig ist ;)

~~~\nimport java.util.Scanner;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author admin
 */
public class Bsp2_3_1127976_2 {
    public static void main(String[] args)
    {
        Scanner s= new Scanner(System.in);
        Vektor3D V1= new Vektor3D ();
        Vektor3D V2= new Vektor3D ();
        Vektor3D V3= new Vektor3D ();
        
        System.out.print("Dieses Programm errechnet Ihnen die Laenge von 3 Vektoren eineln, "
                + "\nund die Laenge der 3 addierten Vektoren!"
                
                + "\nGeben sie nun die x-Koordinate des 1. Vektors ein: ");
        V1.x=s.nextDouble();
        System.out.print("                             Nun die y-Koordinate: ");
        V1.y=s.nextDouble();
        System.out.print("                             Nun die z-Koordinate: ");
        V1.z=s.nextDouble();
        
        System.out.print("\nGeben sie nun die x-Koordinate des 2. Vektors ein: ");
        V2.x=s.nextDouble();
        System.out.print("                             Nun die y-Koordinate: ");
        V2.y=s.nextDouble();
        System.out.print("                             Nun die z-Koordinate: ");
        V2.z=s.nextDouble();
        
        System.out.print("\nGeben sie nun die x-Koordinate des 3. Vektors ein: ");
        V3.x=s.nextDouble();
        System.out.print("                             Nun die y-Koordinate: ");
        V3.y=s.nextDouble();
        System.out.print("                             Nun die z-Koordinate: ");
        V3.z=s.nextDouble();
        
        System.out.println("\n\nLV1= " + V1.Laenge3D()+ ""
                + "\nLV2= " + V2.Laenge3D() + ""
                + "\nLV3= "+V3.Laenge3D() + ""
                + "\nLVA= "+(V3.Vektoraddition(V1.Vektoraddition(V2))).Laenge3D());
    }
}

class Vektor3D extends Vektor2D{
    double z;
    
    Vektor3D (){
        x=1;
        y=1;
    }
    
    Vektor3D(double xx,double yy,double zz){
        x=xx;
        y=yy;
        z=zz;
    }
    
    Vektor3D Vektoraddition (Vektor3D Vektor2){
        Vektor3D Vektorsumme;
        Vektorsumme= new Vektor3D();
        Vektorsumme.x=x+Vektor2.x;
        Vektorsumme.y=y+Vektor2.y;
        Vektorsumme.z=z+Vektor2.z;
        return Vektorsumme;             
    }
    
    double Laenge3D (){
        double Vektorlaenge;
        Vektorlaenge = Math.sqrt(Math.pow(x,2)+Math.pow(y,2)+Math.pow(z,2));
        return Vektorlaenge;
    }
}\n~~~

Bei Beispiel 4 hab ich im Moment mal gaaaar keinen Plan, und bei BSP 5... naja schau ich mir dann mal an ;)
Gute Nacht allerseits ;)
Dieter ±0

So nochmal zum Verständnis: sollen die Vektoren nun im Programm oder in der Klasse addiert werden? Weil wie schafft man es dass sich die Klasse alle drei Vektoren "merkt"?

Pia ±0

Kann mir jemand vielleit das 3.Bsp erklären? (ich weiß ich bin ein bisschen spät dran)?

Michael ±0

ich hab ne frage.. ~~~\n public class Vektor2D {

   int dimension = 2;
   double x[] = new double[dimension];
   
    
    Vektor2D()
    {
        x[0] = 1;
        x[1] = 1;    
    }
    Vektor2D(double x0, double x1)
    {
        x[0] = x0;
        x[1] = x1;
        
    }
    

   
}\n~~~ wenn ich nun nun im nächsten file schreib v3 extends vektor2d .. was genau übernimmt er dann? ich hätte mal versucht zu sagen dimension=3 , aber damit kann er nedmal was anfangen ...?

Edit: mittlerweile spuckt er mir im V3 aus 'field hides another one' .. ich hab irgendwo schonmal was wegen supe,r override und this aber ich weiss ned wirklich wie ich das anwenden soll hier. ich will im endeffekt nur das "int dimension = 2" vom V2D mit dim=2 überschreiben.

Derya ±0

Aufgabe 2.3 verstehe ich nicht!! Kann mir jemand schnell sagen was da gemeint ist? Was meint man mit erben?? Falls es schon erklärt wurde bitte sagen wo es steht :D

Daniel ±0

Bsp5 anybody? :)

Lisa ±0

Hallo Leute, bin beim letzten Schritt von Bsp4. Hab bis jetzt die ArrayList erstellt, die Beträge der Vektoren darin gespeichert, jetzt soll die compareTo-Methode von Vektor3DComparable die Längen vergleichen. Mit welchem Befehl kann mann das am besten machen...mit einer for-Schleife?

for(int j = 0; j < Bsp4_1127012_2.Vektorliste.size; j++); ich weiß nicht, wie ich die Werte der Arrayliste da reinbekommen soll

Wär super, wenn mir da jemand weiterhelfen könnte, wie die compareTo-Methode fülle. Danke schon im Voraus

Linus ±0

ja würde eine for-Schleife empfehlen und du liest am besten die X,Y,Z Werte aus Vektor3Dcomparable aus.

Du hast ja bei der Eingabe hoffentlich deine Vektoren schön definiert :)

System.out.println(&quot;Vektor Nummer 2&quot;);
    System.out.println(&quot;W&auml;hlen Sie die X-Koordinate:&quot;);
    werte[0] = input.nextDouble();
    System.out.println(&quot;W&auml;hlen Sie die Y-Koordinate:&quot;);
    werte[1] = input.nextDouble();
    System.out.println(&quot;W&auml;hlen Sie die Z-Koordinate&quot;);
    werte[2] = input.nextDouble();
    bezeichnung = &quot;Vektor 2&quot;; 
    Vektor3Dcomparable b = new Vektor3Dcomparable(werte,bezeichnung);
    vektorListe.add(b);
\n~~~

So k&ouml;nnte man nun die Vektoren auslesen. Wobei es davon abh&auml;ngt wie du mit den Werten von Anfang an umgegangen bist. F&uuml;r getY() muss du z.B. schon in Vektor2D double getY() {return this.resc[1];} eingef&uuml;gt haben.
Eine sog. getter Funktion. Eig ein wenig schwachsinnig in meinen Augen da du damit das private umgehst, ist aber so gefordert...
~~~\n
for(n=0;n&lt;vektorListe.size();n++){
        	System.out.println(&quot;--L&auml;nge--&quot;);
        	System.out.println(vektorListe.get(n).getBezeichnung()
                + &quot;: (&quot; + vektorListe.get(n).getX() + &quot;|&quot; + vektorListe.get(n).getY() + &quot;|&quot; + vektorListe.get(n).getZ()+ &quot;) - L&auml;nge: &quot; + vektorListe.get(n).getAbstand());
        }
\n~~~

Linus
Veronica ±0

Ich versuche gerade die HÜ mit Hilfe der Lösungen von alex zu lösen und kniffel da irgendwie bei ein paar Sachen.. Scheint etwas zu professionell für mich zu sein xD

        for (i=0;i&lt;dim;i++) {
            this.resc[i] = this.resc[i] + ((Vector2D) object).resc[i];
        }
    }\n~~~


Was genau passiert hier?

[*]void sum: Warum haben wir hier in der Klammer 2x object?
[*]void: es wird kein Wert zur&uuml;ckgegeben
[*]for: f&uuml;r einen gewissen Bereich (i=0;i&lt;dim;i++) gilt folgendes
[*]this: bezieht sich auf den schon weiter oben im Programm definiert Wert f&uuml;r resc
[*]So, nun wei&szlig; ich gar nicht mehr weiter, was genaugeschieht hier: ((Vector2D) object).resc[i] ?



Schonmal vorab: bitte-danke :)
Sorry, die Kommentarfunktion ist geschlossen.