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

Dieter ±0

Der Befehl "implements Comparable" macht es möglich mittels der compareTo-Methode eine Elemente paarweise miteinander zu vergleichen.

Man muss im Code folgende Utilities laden, damit es funktioniert

import java.util.Collections;
import java.util.List;\n~~~

Dann kann man durch die Collections.sort(Liste); eine Sortierung vornehmen. Wichtig dabei ist es, dass man in der compareTo-Methode einen Vergleichs"methode" hat, die die Längen zweier Objekte miteinander vergleicht.

ok danke^^
aber die Längen welcher zwei Objekte?
da steht fünf Vektoren, aber meine Klasse ist ja auf drei Vektoren ausgelegt oO
Markus ±0

hallo! hab jetzt mal die ersten vier bsp fertig und sie funktionieren sowiet! falls jedoch noch jemanden fehler auffallen bitte melden

bsp1

import java.util.Scanner;

/**
 *
 * @author markus
 */
public class Bsp1_1127744_2 {
    
    public static void main(String[] args) {
    
        Scanner zahl = new Scanner(System.in);  //Scanneraufruf
        float u , f;                           //double variablen für gleitkomma
        float[] a = new float[2];             //double array mit länge 2
        
        System.out.println("Läne eingeben: ");
        a[0] = zahl.nextFloat();               //einläsen der länge ins array
        
        System.out.println("Breite eingeben: ");
        a[1] = zahl.nextFloat();               //einlesen der breite
        
        f = Flaeche(a);          //f= rückgabewert der flächenmethode mit parameter a
        System.out.println("Die Fläche beträgt: "+f);
        
        u = Umfang(a);           //u= rückgabewert der umfangmethode 
        System.out.println("der Umfang beträgt: "+u);      
     
        
    }
    
private static Float Umfang (float a[]){  /*umfangmethode rückgabewert double 
                                             *und parameter double array a
                                             *privat da die methode nur in
                                             *dieser klasse verwendet wird*/
            float u;                       //lokale variable u
            u = 2*(a[0]+a[1]);              //berechnung des umfanges
            return u;                       //rückgabe von u
             
}
private static float Flaeche (float a[]){ //flächenmethode rückgabewert double
    float f;                               //lokale variable
    f=a[0]*a[1];                            //berechnung
    return f;                               //rückgabe
}
    
}
\n~~~

bsp2:

~~~\n
import java.util.Scanner;

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

/**
 *
 * @author markus
 */
public class Bsp2_1127744_2 {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        double a , b;
    
               
System.out.println("Bitte geben Sie die X Koordinate des ersten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des ersten Vektors ein:");
b = sc.nextDouble();
Vektor_2D v1 = new Vektor_2D(a,b);
v1.Laenge();
        
System.out.println("Bitte geben Sie die X Koordinate des zweiten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des zweiten Vektors ein:");
b = sc.nextDouble();
Vektor_2D v2 = new Vektor_2D(a,b);
v2.Laenge();
        
System.out.println("Bitte geben Sie die X Koordinate des dritten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des dritten Vektors ein:");
b = sc.nextDouble();
Vektor_2D v3 = new Vektor_2D(a,b);
v3.Laenge(); 


//Addition alle 3 Vektoren + Ausgabe
v2.Vektoraddition(v3); //Addition V2+V3 - Wert in V2 gespeichert
v1.Vektoraddition(v2); //Addition V1+(V2+V3) ... vom vorigen Schritt (V2+V3)
System.out.print("der neue Vektor lautet X: "+v1.x+" Y: "+v1.y);
v1.Laenge();

}
}

class Vektor_2D {
     
    double x, y;
    
    public Vektor_2D() {
        this.x=1;
        this.y=1;
    }
    
    public Vektor_2D(double a, double b){
        this.x=a;
        this.y=b;
    }

    void Laenge(){
    double l;
    l=Math.pow(Math.pow(this.x,2)+Math.pow(this.y,2),0.5);
    System.out.println("Die Länge des Vektors beträgt: "+l);
    System.out.println();
    }

//Klasseneigene Methoden
    void Vektoraddition(Vektor_2D v)
    {
    this.x = this.x + v.x;          //Addiert Vektor v zum aufgerufenen Vektor
    this.y = this.y + v.y;
    }
        
}
\n~~~

bsp3:
~~~\n
import java.util.Scanner;

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

/**
 *
 * @author markus
 */
public class Bsp3_1127744_2 {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        double a , b, c;
    
               
System.out.println("Bitte geben Sie die X Koordinate des ersten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des ersten Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des ersten Vektors ein:");
c = sc.nextDouble();

Vektor_3D v1 = new Vektor_3D(a,b,c);

v1.Laenge();


System.out.println("Bitte geben Sie die X Koordinate des zweiten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des zweiten Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des Zweiten Vektors ein:");
c = sc.nextDouble();

Vektor_3D v2 = new Vektor_3D(a,b,c);

v2.Laenge();


System.out.println("Bitte geben Sie die X Koordinate des dritten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des dritten Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des dritten Vektors ein:");
c = sc.nextDouble();

Vektor_3D v3 = new Vektor_3D(a,b,c);

v3.Laenge();


//Addition alle 3 Vektoren + Ausgabe
v2.Vektoraddition(v3); //Addition V2+V3 - Wert in V2 gespeichert
v1.Vektoraddition(v2); //Addition V1+(V2+V3) ... vom vorigen Schritt (V2+V3)

System.out.print("der neue Vektor lautet X: "+v1.x+" Y: "+v1.y+" Z: "+v1.z);

v1.Laenge();

} 
}

class Vektor_3D extends Vektor_2D{
       
        double z;

      public Vektor_3D(){
          super();
          this.z=1;  
      } 
      
      public Vektor_3D(double x, double y, double z){
           super(x,y);
           this.z=z;
        }    
        
    void Vektoraddition(Vektor_3D v)
    {
    this.x = this.x + v.x;
    this.y = this.y + v.y;
    this.z = this.z + v.z;
    }
    
    @Override
    void Laenge(){
    double l;
    l=Math.pow(Math.pow(this.x,2)+Math.pow(this.y,2)+Math.pow(this.z,2),0.5);
    System.out.println("Die Länge des Vektors beträgt: "+l);
    System.out.println();
    }   
    
}
\n~~~

bsp4:

~~~\n
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;
/**
 *
 * @author markus
 */
public class Bsp4_1127744_2 {
    
  
    
     public static void main(String[] args) {
        
ArrayList<Vektor_3Dcomparable> vektoren = new ArrayList();
        
        Scanner sc = new Scanner(System.in);
        double a, b, c;
    
               
System.out.println("Bitte geben Sie die X Koordinate des ersten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des ersten Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des ersten Vektors ein:");
c = sc.nextDouble();

vektoren.add(new Vektor_3Dcomparable(a,b,c));


System.out.println("Bitte geben Sie die X Koordinate des zweiten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des zweiten Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des Zweiten Vektors ein:");
c = sc.nextDouble();

vektoren.add(new Vektor_3Dcomparable(a,b,c));


System.out.println("Bitte geben Sie die X Koordinate des dritten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des dritten Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des dritten Vektors ein:");
c = sc.nextDouble();

vektoren.add(new Vektor_3Dcomparable(a,b,c));


System.out.println("Bitte geben Sie die X Koordinate des vierten Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des vierten Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des vierten Vektors ein:");
c = sc.nextDouble();

vektoren.add(new Vektor_3Dcomparable(a,b,c));


System.out.println("Bitte geben Sie die X Koordinate des fünften Vektors ein:");
a = sc.nextDouble();
System.out.println("Bitte geben Sie die Y Koordinate des fünften Vektors ein:");
b = sc.nextDouble();
System.out.println("Bitte geben Sie die Z Koordinate des fünften Vektors ein:");
c = sc.nextDouble();

vektoren.add(new Vektor_3Dcomparable(a,b,c));

System.out.println("Vor dem sortieren:");
        
        for(int i = 0; i < vektoren.size() ; i++){
            vektoren.get(i).Laenge();
        }
        
Collections.sort(vektoren);

System.out.println("Nach dem sortieren: ");

for(int i = 0; i < vektoren.size() ; i++){
            vektoren.get(i).Laenge();
        }

	}
} 



class Vektor_3Dcomparable extends Vektor_3D implements Comparable<Vektor_3Dcomparable>{
    
	
	public Vektor_3Dcomparable(){
		super();
	}
	
	public Vektor_3Dcomparable(double x, double y, double z){
		super(x,y,z);
	}
	
    @Override
	public int compareTo(Vektor_3Dcomparable v) {
        
 if(Math.pow(Math.pow(this.x,2)+Math.pow(this.y,2)+Math.pow(this.z,2),0.5) == 
    Math.pow(Math.pow(v.x,2)+Math.pow(v.y,2)+Math.pow(v.z,2),0.5)) return 0;
                
if(Math.pow(Math.pow(this.x,2)+Math.pow(this.y,2)+Math.pow(this.z,2),0.5) < 
   Math.pow(Math.pow(v.x,2)+Math.pow(v.y,2)+Math.pow(v.z,2),0.5)) return -1;
		
else return 1;
	}

}

\n~~~
Wolfgang ±0

ok danke^^ aber die Längen welcher zwei Objekte? da steht fünf Vektoren, aber meine Klasse ist ja auf drei Vektoren ausgelegt oO

Du kannst einfach fünf Vektoren manuell im Code definieren. Musst nichts einlesen. Diese fünf werden dann nacheinander paarweise verglichen und in eine Reihenfolge gebracht.

Also braucht man eigentlich nur eine Methodenberechnung, nämlich jene die die Länge eines Vektors berechnet. Das Resultat davon wird dann für die Sortierung benötigt.

Omer ±0

@ ranzmann muss mandie vektor2d,vektor3d... in neue klassen schreiben oder darf man das so anhängen unten ?

Markus ±0

k.a. ich finde die angaben bei dieser hü sehr schwammig! werde jetzt die programme nicht mehr großartig ändern

Veronica ±0

Ich hab jetzt gerade ein Problem bei der Gesamtlänge (ja, noch immer Bsp 2, ich hab zwischenzeitlich resigniert >.<). Jedenfalls, gebe ich für die Vektoren 1,0; 0,1; 1,1; ein, dann erhalte ich nicht das richtige Ergebnis - woran liegts? Sind Nullen verboten?

Die L&auml;nge des zweiten Vektors betr&auml;gt 1.0
Die L&auml;nge des dritten Vektors betr&auml;gt 1.4142135623730951
Die Gesamtl&auml;nge der Vektoren betr&auml;gt 2.8284271247461903\n~~~
Markus ±0

@veronica wenn mich nicht alles täust stimmen die längen!

Veronica ±0

Die der einzelnen Vektoren sind ja so auch richtig, aber summiere ich die auf, ergibt sich ja 3,414... :/

Wolfgang ±0

Kannst du über der public class, drunter oder in ein eigenes File schreiben. Beim Build & Clean macht netbeans so oder so aus jeder Class ein eigenes File, aber wie du es machst bleibt dir überlassen.

Veronica, 0 ist eigentlich nicht verboten. Schon mal mit Koordinaten ohne null probiert?

edit: Dann hast du vermutlich einen Fehler bei der Gesamtlängenberechnung, wenn die Einzellängen stimmen. Parameter werden alle übergeben ?

Veronica ±0

Das is ja das - mit irgendwelchen anderen Zahlen passts komischer Weise. Ich hätt jetzt eig auch keinen Fehler entdeckt .. hmpf hmpf

Markus ±0

so wie ich die längenberechnung verstanden hab soll man nicht die einzelnen längen addieren sonder zuerst die vektoren addieren und von diesem neuen vektor die länge berechnen

der neu vektor wäre dann bei deinem bsp x:2 y:2 l=(x²+y²)^1/2=(4+4)1/2=2,82....

Wolfgang ±0

Stimmt, hat ranzmann recht, ist mir gar nicht aufgefallen.

Vektoren addieren und dann die Länge berechnen.

Veronica ±0

Ooooh, Mann! >.< Dankeschön! Hätten wir das auch geklärt haha, das hatt ich falsch verstanden!

Martin ±0

So... BSP nummer 2.5... (dank an alex ;) )


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

/**
 *
 * @author Martin Holzer
 */
public class Bsp2_5_1127976_2 {
}
    
class Balkenbieger{
    
    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        
        double f=0;
        char Wahl,nochmal; // Wahl= Variable f&uuml;r switch;
        
        do
        {
            Balken B = new Balken();

            System.out.println(&quot;Dieses Programm berechnet anhand von Ihnen eingegebenen Daten die maximale Durchbiegung eines Balken&quot;);
            
            //Eingabe der Parameter
            System.out.println(&quot;Bitte geben sie nun die Querschnittsgroesse a in [mm] ein:&quot;);
            B.setBreite(s.nextDouble());
            System.out.println(&quot;Bitte geben sie nun die Laenge l des Traegers in [mm] ein:&quot;);
            B.setLaenge(s.nextDouble());
            System.out.println(&quot;Bitte geben sie nun die auf den Traeger wirkende Kraft F in [N] ein ein:&quot;);
            B.setKraft(s.nextDouble());
                    
            //Wahl des Querschnitts        
            System.out.println(&quot;\nWaehlen sie den von Ihnen gewuenschten Querschnitt: \n[q]uadratisch \n[k]reisfoermig \n[i]-Tr&auml;ger&quot;);
            Wahl = s.next().charAt(0);
            B.setWahl(Wahl);
        
            //Wahl des Traegertyps
            System.out.println(&quot;Waehlen sie nun bitte den von Ihnen gewuenschten Traegertyp.&quot;
                + &quot; \n[K]ragtraeger mit Last am Endpunkt \n[B]eidseitig gelagert, Krafteinleitung mittig &quot;);
            Wahl = s.next().charAt(0);
            
            //Traegertyp ver&auml;ndern und f Berechnen
            switch(Wahl){
                case 'K'|'k':
                    Kragtraeger K=new Kragtraeger();
                    K.setParameter(B);
                    f= K.KragtraegerMaxDb();
                    break;
                case 'B'|'b': 
                    Auflagerbalken A=new Auflagerbalken();
                    A.setParameter(B);
                    f= A.AuflagerbalkenMaxDb();
                    break;
                default:
                    System.out.println(&quot;Houston, wir haben ein Problem&quot;);
            }
            
            System.out.println(&quot;\nDie maximale Durchbiegung betraegt: &quot;+f+&quot;mm&quot;);
            System.out.println(&quot;Wollen sie eine erneute Berechnung durchfuehren? [J]a / [N]ein&quot;);
            nochmal=s.next().charAt(0);
            }
            while(nochmal=='J' | nochmal=='j');
            }
        }  

abstract class Querschnitt {
    double I;
    double Quadrat(double a){return I = Math.pow(a,4)/12;}
    double Kreis(double a){return I = Math.pow(a,4)*Math.PI/64;}
    double ITraeger(double a){return I = Math.pow(a,4)*10/144;}
}

class Balken extends Querschnitt{
    protected double I=0,F,l,a,E=210000;
    
    public void setBreite(double Breite){this.a = Breite;}
    public void setLaenge(double Laenge){this.l = Laenge;}
    public void setKraft(double Kraft){this.F = Kraft;}
    
    public void setWahl(char Wahl){
        switch(Wahl){
        case 'q'|'Q': I = Quadrat(a); break;
        case 'k'|'K': I = Kreis(a); break;
        case 'i'|'I': I = ITraeger(a); break;
        default : System.out.println(&quot;Keine G&uuml;ltige Eingabe&quot;);
        }
    }
    
    public void setParameter(Balken current){
         this.E = current.E;
         this.a = current.a;
         this.l = current.l;
         this.F = current.F;
         this.I = current.I;
    }
    
}

class Kragtraeger extends Balken{
    double KragtraegerMaxDb(){
        double f=(F*(Math.pow(l,3)))/(3*E*I);
        return f;
    }
}

class Auflagerbalken extends Balken{
    double AuflagerbalkenMaxDb(){
        double f=(F*Math.pow(l,3))/(48*E*I);
        return f;
    }
}

\n~~~
Sorry, die Kommentarfunktion ist geschlossen.