Forum / Grundlagen des Programmierens / 2. Hausübung, Beispiel 2.5

2. Hausübung, Beispiel 2.5

Ich beschäftige mich heute schon den ganzen Tag mit dem Beispiel 2.5, aber irgendwie komme ich nicht weiter.

Ich habe die Klassen zwar wie gefragt geschrieben, aber nun scheitere ich in der main methode. ich weiß nicht wie ich die Methoden aus der abstrakten Klasse Querschnitt aufrufen kann... Kann mir vl jemand weiterhelfen?



abstract class querschnitt {
    double a, I; 
    double pi=3.14159265;

    public void setquerschnitt(double a) {
        this.a = a;
    }

    public double quadratisch() {         
        I = (a * a * a * a) / 12;
        return I;
    }

    public double kreisfoermig() {  
        I = (a * a * a * a * pi) / 64;
        return I;
    }

    public double Ifoermig() { 
        I = (a * a * a * a * 10) / 144;
        return I;
    }
    
}
class balken extends querschnitt {

    public double F, l;  
    
    public balken(double a){
        super(); 
    }
    
    public double getF() {
        return F;
    }

    public double getI() {
        return I;
    }

    public double getL() {
        return l;
    }

    public void setF(double F) {
        this.F = F;
    }

    public void setI(double I) {
        this.I = I;
    }

    public void setL(double l) {
        this.l = l;
    }
       
}

class Auflagerbalken extends balken {

    private double f;
    
    public Auflagerbalken(double a){
        super(a);
    }

    public double beidseitiggelagert() {
        f = (F * l * l * l) / (48 * E * I);
        return f;
    }
}

class Kragtraeger extends balken{

    private double f;

    public Kragtraeger(double a){
        super(a);
    }


    public double kragtraeger() {
        f = (F * l * l * l) / (3 * E * I);
        return f;
    }
}





public class Aufgabe_5_1127551_2 {

    public static void main (String[] args)
    {
    double F, a, l;
    double E=210;
    String q, q1, q2;
    
    Scanner sc =new Scanner(System.in);    
    System.out.println("Willkommen zu Durchbiegung 2.0\n");    
    do {
    System.out.println("Bitte geben Sie die gewünschte Kraft ein:");    
    F=sc.nextDouble();
    System.out.println("Bitte geben Sie die gewünschte Trägerlänge ein:");    
    l=sc.nextDouble();
    System.out.println("Bitte geben Sie die gewünschte Querschnittsgroesse"
            + " ein:");    
    a=sc.nextDouble();
    System.out.println("Bitte geben Sie die gewünschte Querschnittsform an:");    
    q1=sc.nextLine();
    System.out.println("Bitte geben Sie die gewünschte Belastungsart an:");    
    q2=sc.nextLine();

    

    System.out.println("\nWollen Sie einen weiteren Programmdurchlauf starten?"
            + "[ja/nein]");
    q=sc.nextLine();
    } while ("ja".equals(q));
    }    
    
}
\n~~~
Andreas ±0

@ Matthias:

Wir sollen die Methoden von der Klasse Querschnitt in die Klasse Balken vererben, also so hab ich es jedenfalls aufgefasst!?!?

Matthias ±0

Ich habs so aufgefasst das in der hierarchischen Ebene querschnitt ganz oben steht, dann kommt die SUbKlasse balken welche die beiden SubSub Klassen Kragtraeger und Auflagerbalken hat...

Andreas ±0

Wenn ich meine Code fertig habe, dann können wir vergleichen. Weißt du vll wie ich einen infinity fehler weg bekomme? Alle abfragen klappen, aber am Ende erhalte ich dann diesen Fehler beim ergebnis!

Matthias ±0

ich habe genau das selbe problem wie du. das compilieren funktioniert, die abfragen funktionieren, aber in den beiden letzten Klassen wo nur noch die Durchbiegung errechnet werden soll kommen die Variablen I, F und l nicht an --> /0 --> infinity... aber ich komm nicht drauf warum die variablen nicht ankommen, weil ich sie vorher als public definiert habe.

Andreas ±0

Ich hab irgendwie gelesen, dass das mit den nachkommerstellen zusammen hängt. ich könnt durchdrehen!

Andreas ±0

Angesichts dem schönen Wetter, eine fertige Hilfestellung zu Beispiel 5:

package Bsp5_1129273_2;


abstract class Querschnitt {
    
    public static double jSquare(double w){
        double j = ((Math.pow(w, 4))/12);
        return j;
    }
    
    public static double jCircle(double w){
        double j = (Math.pow(w, 4)*Math.PI)/4;
        return j;
    }
    
    public static double jDoubleT(double w){
        double j = (10/144)*Math.pow(w, 4);
        return j;
    }
    
}\n~~~

~~~\n
package Bsp5_1129273_2;


public class Balken extends Querschnitt {
    
       protected double width;
       protected double length;
       protected double force;
       protected double inertia = 0;
       protected double youngs = 210000000;
       
       
       // Methode erstellt um with zu belegen obwohl es protected ist       
       public void setWidth(double width){
           
           this.width = width;
           
       }
       
       public void setlen(double length){
           
           this.length = length;
           
       }       
         
        public void setfor(double force){
           
           this.force = force;
           
       }
       
       
       public void setInert(int wahl){
           
           switch(wahl){
            case 1: inertia = jSquare(width); break;
            case 2: inertia = jCircle(width); break;
            case 3: inertia = jDoubleT(width); break;
           }
       
       
       }
       
       public String inertText(){
           return ("Ihr Querschnitt hat folgende Flächenträgheit:" + inertia + "mm4");
       }
 
       
       public void setPara(Balken b){
               
               this.width = b.width;
               this.length = b.length;
               this.force = b.force;
               this.youngs = b.youngs;
               this.inertia = b.inertia;
}
}\n~~~

~~~\n
package Bsp5_1129273_2;


public class Kragtraeger extends Balken{
               
    
        public double uMax2(){
        double u = (force*Math.pow(length, 3.0))/(3.0*youngs*inertia);
        return u;
    }
    
}\n~~~

~~~\n
package Bsp5_1129273_2;


public class Auflagerbalken extends Balken{
    
    
    
        public double uMax1(){
            double u = (force*Math.pow(length, 3))/(48*youngs*inertia);
        return u;
    }
    
}
\n~~~

~~~\n
package Bsp5_1129273_2;

import java.util.Scanner;


public class Balkenbieger {
    
    public static void main (String[] args){
        
        Scanner input = new Scanner (System.in);
        Balken balken = new Balken();
        
        System.out.println("Willkommen im Programm zur Biegebalkenberechnung! \n"
                + "Bitte wählen Sie aus einem der folgenden Querschnitte: \n"
                + "1. Quadratisch \n"
                + "2. Kreisförmig \n"
                + "3. quadratische I-Träger");
        
        int wahl = input.nextInt();
                
        System.out.println("Bitte geben Sie die Größe des Querschnitts an (in Millimeter):");
        
        balken.setWidth(input.nextDouble());
        
        balken.setInert (wahl);
                  
        System.out.println(balken.inertText());
        
        System.out.println("Bitte geben Sie nun die Art des Biegebalkens an: \n"
                + "1. Beidseitig eingespannt \n"
                + "2. Einseitig eingespannt, einseitig gelagert");
        wahl = input.nextInt();
        
        System.out.println("Bitte geben Sie nun die Länge des Biegebalkens an (in Millimeter):");
        balken.setlen(input.nextDouble()); //alte Variante: length = input.nextDouble();
        
        System.out.println("Bitte geben Sie nun die einwirkende Kraft an (in Newton):");
        balken.setfor(input.nextDouble());
        
        
        System.out.println("Die Maximale Durchbiegung wird jetzt berechnet.");
        double bending = 0;
        
        switch(wahl){
            case 1:
                Auflagerbalken aufb = new Auflagerbalken();
                aufb.setPara(balken);
                bending = aufb.uMax1(); 
                break;
            case 2: 
                Kragtraeger kragt = new Kragtraeger();
                kragt.setPara(balken);
                bending = kragt.uMax2(); 
                break;
        }
        
        System.out.println("Der Balken biegt sich um " + bending + "mm durch.");
        
        
    }
}
\n~~~

Sollten Fehler auffallen, dann bitte melden. Sonnst dürfte es ziemlich übersichtlich dargestellt sein.
Patrick ±0

Angesichts dem schönen Wetter, eine fertige Hilfestellung zu Beispiel 5:

package Bsp5_1129273_2;


abstract class Querschnitt {
    
    public static double jSquare(double w){
        double j = ((Math.pow(w, 4))/12);
        return j;
    }
    
    public static double jCircle(double w){
        double j = (Math.pow(w, 4)*Math.PI)/4;
        return j;
    }
    
    public static double jDoubleT(double w){
        double j = (10/144)*Math.pow(w, 4);
        return j;
    }
    
}\n~~~

~~~\n
package Bsp5_1129273_2;


public class Balken extends Querschnitt {
    
       protected double width;
       protected double length;
       protected double force;
       protected double inertia = 0;
       protected double youngs = 210000000;
       
       
       // Methode erstellt um with zu belegen obwohl es protected ist       
       public void setWidth(double width){
           
           this.width = width;
           
       }
       
       public void setlen(double length){
           
           this.length = length;
           
       }       
         
        public void setfor(double force){
           
           this.force = force;
           
       }
       
       
       public void setInert(int wahl){
           
           switch(wahl){
            case 1: inertia = jSquare(width); break;
            case 2: inertia = jCircle(width); break;
            case 3: inertia = jDoubleT(width); break;
           }
       
       
       }
       
       public String inertText(){
           return ("Ihr Querschnitt hat folgende Flächenträgheit:" + inertia + "mm4");
       }
 
       
       public void setPara(Balken b){
               
               this.width = b.width;
               this.length = b.length;
               this.force = b.force;
               this.youngs = b.youngs;
               this.inertia = b.inertia;
}
}\n~~~

~~~\n
package Bsp5_1129273_2;


public class Kragtraeger extends Balken{
               
    
        public double uMax2(){
        double u = (force*Math.pow(length, 3.0))/(3.0*youngs*inertia);
        return u;
    }
    
}\n~~~

~~~\n
package Bsp5_1129273_2;


public class Auflagerbalken extends Balken{
    
    
    
        public double uMax1(){
            double u = (force*Math.pow(length, 3))/(48*youngs*inertia);
        return u;
    }
    
}
\n~~~

~~~\n
package Bsp5_1129273_2;

import java.util.Scanner;


public class Balkenbieger {
    
    public static void main (String[] args){
        
        Scanner input = new Scanner (System.in);
        Balken balken = new Balken();
        
        System.out.println("Willkommen im Programm zur Biegebalkenberechnung! \n"
                + "Bitte wählen Sie aus einem der folgenden Querschnitte: \n"
                + "1. Quadratisch \n"
                + "2. Kreisförmig \n"
                + "3. quadratische I-Träger");
        
        int wahl = input.nextInt();
                
        System.out.println("Bitte geben Sie die Größe des Querschnitts an (in Millimeter):");
        
        balken.setWidth(input.nextDouble());
        
        balken.setInert (wahl);
                  
        System.out.println(balken.inertText());
        
        System.out.println("Bitte geben Sie nun die Art des Biegebalkens an: \n"
                + "1. Beidseitig eingespannt \n"
                + "2. Einseitig eingespannt, einseitig gelagert");
        wahl = input.nextInt();
        
        System.out.println("Bitte geben Sie nun die Länge des Biegebalkens an (in Millimeter):");
        balken.setlen(input.nextDouble()); //alte Variante: length = input.nextDouble();
        
        System.out.println("Bitte geben Sie nun die einwirkende Kraft an (in Newton):");
        balken.setfor(input.nextDouble());
        
        
        System.out.println("Die Maximale Durchbiegung wird jetzt berechnet.");
        double bending = 0;
        
        switch(wahl){
            case 1:
                Auflagerbalken aufb = new Auflagerbalken();
                aufb.setPara(balken);
                bending = aufb.uMax1(); 
                break;
            case 2: 
                Kragtraeger kragt = new Kragtraeger();
                kragt.setPara(balken);
                bending = kragt.uMax2(); 
                break;
        }
        
        System.out.println("Der Balken biegt sich um " + bending + "mm durch.");
        
        
    }
}
\n~~~

Sollten Fehler auffallen, dann bitte melden. Sonnst dürfte es ziemlich übersichtlich dargestellt sein.


Ich habe in der Main class bereits einen fehler entdeckt!! Und zwar, hast du die variable "int wahl" zweimal verwendet. ..wenn man jetzt jedoch bei der 1. Auswahl 1 wählt und bei der 2. Auswahl 2 wählt kommt irgend ein fehler Infity blabla....  ! ...einfach die beiden Variablen unterschiedlich benennen und es funkt einwandfrei!!!!
Patrick ±0

Sorry!!! Das war doch nicht der Fehler!!! Der Fehler lag in der Berechnung des FTM für den I- Träger!!!! Die Formel dafür gehört auf (10*a^4)/144 ausgebessert!!! Dürfte anscheinend ein Fehler in der Musterlösung von BSP 1.5 sein!!!!

Andreas ±0

Danke, irgenwie war bei mir kein fehler mehr. hab diese eigendlich bei dem code, den ich online gestellt hab schon gelöst. aber ich werd nochmals ein paar runs austesten

Andreas ±0

Sorry!!! Das war doch nicht der Fehler!!! Der Fehler lag in der Berechnung des FTM für den I- Träger!!!! Die Formel dafür gehört auf (10*a^4)/144 ausgebessert!!! Dürfte anscheinend ein Fehler in der Musterlösung von BSP 1.5 sein!!!!

Hab ich gerade ausprobiert, da liegt auch nich der Fehler. Verdammt!

Diego ±0

Also das ist meine Lösung zum Bsp. 2.5 Manchmal bekomme ich was anderes bei der maxdurchbiegung mit meinen program als mit dem Taschenrechner :/ Kann jemand ein Fehler finden?

package Bsp5_XXXXXXX_2;

import java.util.Scanner;

abstract class Querschnitt {
    protected double ftm;
    
    public double jQuadratisch(double a) {
        this.ftm = ((Math.pow(a, 4)) / 12);
        return this.ftm;
    }

    public double jKreisfoermig(double a) {
        this.ftm = (Math.pow(a, 4) * Math.PI) / 64;
        return this.ftm;
    }

    public double jItraeger(double a) {
        this.ftm = (10 * Math.pow(a, 4))/144;
        return this.ftm;

    }
}

class Balken extends Querschnitt {

    protected double a;
    protected double laenge;
    protected double kraft;
    protected double inertia;
    
    Balken(){
        this.a = 0;
        this.laenge = 0;
        this.kraft = 0;
    }
    
    Balken(double aa, double laenge, double kraft){
        this.a = aa;
        this.laenge = laenge;
        this.kraft = kraft;
    }

    public void setalk(double aa, double laenge, double kraft) {
        this.a = aa;
        this.laenge = laenge;
        this.kraft = kraft;
    }

    public void setInertia(char querschnitt) {

        switch (querschnitt) {
            case '1':
                this.inertia = jQuadratisch(this.a);
                break;
            case '2':
                this.inertia = jKreisfoermig(this.a);
                break;
            case '3':
                this.inertia = jItraeger(this.a);
                break;
        }
    }
    
    double getinertia(){
        return this.inertia;
    }
}


class Kragtraeger extends Balken {
    

    public Kragtraeger(double aa, double laenge, double kraft) {
        super(aa, laenge, kraft);
        
    }

    double Maximalebiegung2(double iner) {
        double maxf = (kraft * Math.pow(laenge, 3)) / (3 * 210000000 * iner);
        return maxf;
    }
}

class Auflagerbalken extends Balken {
    
    public Auflagerbalken(double aa, double laenge, double kraft) {
        super(aa, laenge, kraft);
    }

    double Maximalbiegung1(double iner) {
        double maxf = (kraft * Math.pow(laenge, 3)) / (48 * 210000000 * iner);
        return maxf;
    }
}

public class Balkenbieger extends Balken {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        Balken balken = new Balken();

        double width;
        double length;
        double force;
        double f;


        System.out.println("Willkommen im Programm zur Biegebalkenberechnung! \n"
                + "Bitte wählen Sie aus einem der folgenden Querschnitte: \n"
                + "1. Quadratisch \n"
                + "2. Kreisförmig \n"
                + "3. quadratische I-Träger");
        char querschnitt = input.next().charAt(0);
        System.out.println("Bitte geben Sie die Größe des Querschnitts an (in Millimeter):");
        width = input.nextDouble();

        System.out.println("Bitte geben Sie nun die Art des Biegebalkens an: \n"
                + "1. Beidseitig eingespannt \n"
                + "2. Einseitig eingespannt, einseitig gelagert");
        int wahl = input.nextInt();
        System.out.println("Bitte geben Sie nun die Länge des Biegebalkens an (in Millimeter):");
        length = input.nextDouble();
        System.out.println("Bitte geben Sie nun die einwirkende Kraft an (in Newton):");
        force = input.nextDouble();


        balken.setalk(width, length, force);
        balken.setInertia(querschnitt);

        System.out.println("Die Maximale Durchbiegung wird jetzt berechnet.");
        double jm = balken.getinertia();
        switch (wahl) {
            case 1:
                Auflagerbalken auflagerbalken = new Auflagerbalken(width, length, force);
                f = auflagerbalken.Maximalbiegung1(jm);
                System.out.println("Die Maximale Durchbiegung lautet: " + f);
                break;

            case 2:
                Kragtraeger kragtraeger = new Kragtraeger(width, length, force);
                f = kragtraeger.Maximalebiegung2(jm);
                System.out.println("Die Maximale Durchbiegung lautet: " + f);
                break;
        }



    }
}

\n~~~
Wolfgang ±0

Widerspricht es eh nicht den Abgabekonventionen, wenn wir die Datei "balkenbieger.class" benennen, wie es in der Angabe verlangt ist ?

Daniel ±0

Im Forum wurde gesagt (von einem Tutor), die Abgabekonventionen können hier vernachlässigt werden. https://tuwel.tuwien.ac.at/mod/forum/discuss.php?d=35934

Wolfgang ±0

Ja tolle wurst, mit der Bedingung : "sofern Sie alle Klassen dieses Beispiels in ein Package mit Namen "_MMMMMMM_2" packen"

Wie gut dass ich immer default packages verwenden....

Felix ±0

kann mir jmd sagen warum ihr die parameter in balken "protected" setzt und was in den klassen jetzt genau das gekapselte ist? (Angabe: "Alle Klassen sollen gekapselt werden!) Danke schonmal im voraus...

Sorry, die Kommentarfunktion ist geschlossen.