Klasse Zylinder

Dilay123

Mitglied
Hey Leute,

Mein Professor hat mir uns eine Hausaufgabe aufgegeben wo ich nicht wirklich Ahnung habe wie ich das Programmieren sollte, da ich leider an dem Tag wo die das durchgemacht haben krank war. Ich würde mich freuen, wenn ihr mir helfen könntet. Natürlich will ich von euch nicht, dass ihr die ganze Hausübung für mich macht.

Die Hausübung lautet:
Erstellen Sie eine Klasse Zylinder in objektorientierter Programmierung.
Die Klasse soll 2 überladene Konstruktoren enthalten. Erzeugen Sie mindestens 4 Objekte in der main-Methode. Methoden für die Berechnung der Grundfläche, des Volumens, der Mantelfläche und der Oberfläche sollen entwickelt werden. Weiters sollen Methoden equals(Zylinder z) und anzeigen() programmiert werden. Alle Methoden sollen getestet werden.

Ich freu mich schon auf eure Antworten

LG Dilay
 

White_Fox

Top Contributor
Wie soll man dir helfen wenn du nicht sagst, wo es klemmt?

Und "java vererbung" in die Suchmaschine deines geringsten Mißtrauens einzugeben kriegst du doch wohl noch hin - Studium hat vor allem etwas mit Selbermachen zu tun.
 

temi

Top Contributor
Wo ist denn da Vererbung?

@Dilay123: Fang doch einfach mal an und frag an den Stellen, wo du konkrete Schwierigkeiten hast.

Java:
public class Zylinder {
    
    // your playground!
    
}
 

Dilay123

Mitglied
Hey Leute,

ich hab mal bis jetzt versucht selber etwas hinzubekommen. Bin mir leider nicht so sicher dabei. Mein Probleme gerade ist, dass bei diesen public int gets bei mir das als falsch angezeigt wird und ich weiß bei System.out.println("Zylinder v: " + this.radiusr ); nicht was am Ende plus rechnen bin mir da nicht so sicher und hab einfach radius hingeschrieben.
Tut mir leid, dass ich dumme Fragen gerade stelle, bin erst ganz neu im programmieren :/


Java:
public class Zylinderr {

    private double radiusr;
    private double hoeheh;
    private double deckflaeched;
    private double pi=Math.PI;
    
    public Zylinderr(double r, double h, double d, double pi) {
        this.radiusr=r;
        this.hoeheh=h;
        this.deckflaeched=d;
        this.pi=Math.PI;
        }
    
    public void anzeigen() {
            System.out.println("Zylinder v: " + this.radiusr );
        }
        
        public int getGrundflaeche(){
            return this.pi*this.radiusr*radiusr;
        }
        
        public int getVolumen() {
            return this.pi*this.radiusr*2*this.hoeheh;
        }
        
        public int getMantelflaeche() {
            return 2*this.pi*this.radiusr*this.hoeheh;
        }
        
        public int getOberflaeche() {
            return getGrundflaeche+deckflaeched+getMantelflaeche;
        }
}
 

mihe7

Top Contributor
Mein Probleme gerade ist, dass bei diesen public int gets bei mir das als falsch angezeigt wird
Ja, das Ergebnis ist keine Ganzzahl -> nimm double als Rückgabetyp.

und ich weiß bei System.out.println("Zylinder v: " + this.radiusr ); nicht was am Ende plus rechnen bin mir da nicht so sicher und hab einfach radius hingeschrieben.
Das plus an der Stelle ist keine Rechnung. Hier wird einfach radiusr in eine Zeichenkette umgewandelt und diese an "Zylinder v: " gehangen.
 

Dilay123

Mitglied
Ja, das Ergebnis ist keine Ganzzahl -> nimm double als Rückgabetyp.


Das plus an der Stelle ist keine Rechnung. Hier wird einfach radiusr in eine Zeichenkette umgewandelt und diese an "Zylinder v: " gehangen.
Stimmt Danke habe ich übersehen, aber jetzt hab ich da ein Problem.

Java:
public double getOberflaeche() {
            return getGrundflaeche+deckflaeched+getMantelflaeche;
        }

da steht, dass man getGrundfläche und getMantelfläche nicht als Variable annehmen. Dh ich muss das extra oben deklarieren oder?
 

mihe7

Top Contributor
Die Grund- und Mantelfläche wird ja von Methoden berechnet, Du musst die Methoden halt auch aufrufen: getGrundflaeche() (beachte die Klammern am Ende -> Methodenaufruf).
 

Dilay123

Mitglied
Ich hab jetzt versucht, dass zu machen, aber bei return getGrundflaeche+deckflaeched+getMantelflaeche; und bei Zylinder z1 = new Zylinderr(4,5); wird mir ein Fehler angezeigt.


Java:
public class Zylinder {

    private double radiusr;
    private double hoeheh;
    private double deckflaeched;
    private double pi=Math.PI;
   
    public Zylinder(double r, double h, double d, double pi) {
        this.radiusr=r;
        this.hoeheh=h;
        this.deckflaeched=d;
        this.pi=Math.PI;
       
    }
   
        public void anzeigen() {
            System.out.println("Zylinder: " + this.radiusr );
        }
       
        public double getGrundflaeche(){
            return this.pi*this.radiusr*radiusr;
        }
       
        public double getVolumen() {
            return this.pi*this.radiusr*2*this.hoeheh;
        }
       
        public double getMantelflaeche() {
            return 2*this.pi*this.radiusr*this.hoeheh;
           
        }
       
        public double getOberflaeche() {
            return getGrundflaeche+deckflaeched+getMantelflaeche;
        }

    public void rotieren() {
    double z = this.radiusr;
    this.radiusr=this.hoeheh;
    this.hoeheh=z;
}

    public static void main(String[] args) {
       
        Zylinderr z1 = new Zylinder(4,5); //4,5 angenommen
       
        z1.anzeigen();
        System.out.println("Zylinder Grundfläche: " + z1.getGrundflaeche());
       
        z1.anzeigen();
        System.out.println("Zylinder Mantelfläche: " + z1.getMantelflaeche());
       
        System.out.println("Zylinder Volumen: " + z1.getVolumen());
       
        System.out.println("Zylinder Oberfläche: " + z1.getOberflaeche());
       
    }
}
 

mihe7

Top Contributor
Was du irgendwo im Code machst, spielt keine Rolle. In Zeile 34 versuchst Du, auf die Attribute (Instanzvariablen) getGrundflaeche und getMantelflaeche zuzugreifen. Die gibt es nicht, daher ein Fehler.
 

temi

Top Contributor
Java:
return getGrundflaeche; // Zugriff auf eine Variable (z. B. Attribut)
return getGrundflaeche(); // Zugriff auf eine Methode

Bei einem Zugriff auf eine Methode braucht es immer eine Klammer, entweder mit oder ohne Parametern, je nach Methode.
 

Dilay123

Mitglied
Hallo Leute,

Ich hab bemerkt dass Grundfläche und Deckfläche im Grunde das gleiche ist. Ich wollte in die Methode schreiben das Grundfläche=Deckfläche ist, aber wie mach ist das denn :I
 

temi

Top Contributor
Ich hab bemerkt dass Grundfläche und Deckfläche im Grunde das gleiche ist.
Methoden für die Berechnung der Grundfläche, des Volumens, der Mantelfläche und der Oberfläche
Wenn dir der Begriff nicht gefällt, dann verwende ihn halt einfach nicht. Die Aufgabe erfordert ja nur Grundfläche, Mantelfläche, Oberfläche und Volumen. Oberfläche ergibt sich dann aus 2 x Grundfläche + Mantelfläche und Volumen aus Grundfläche x Höhe.
 

temi

Top Contributor
Mal noch ein paar Gedanken...
Java:
public class Zylinder {

    private double radiusr;
    private double hoeheh;
    private double deckflaeched;
    private double pi=Math.PI; // 1

    public Zylinder(double r, double h, double d, double pi) { // 2
        this.radiusr=r;
        this.hoeheh=h;
        this.deckflaeched=d; // 3
        this.pi=Math.PI; // 4
   
    }

    // ...
}

1. Das ist überflüssig, verwende in den Berechnungen direkt die Konstante Math.PI
2. Wozu überhaupt "pi" als Parameter, wenn es doch eine Konstante ist (siehe 1.)?
3. Was machst du eigentlich, wenn die Fläche, die sich aus "r" ergibt, nicht der Fläche "d" entspricht?
4. Sinnlos, weil a) die Instanzvariable bereits bei der Deklaration mit "Math.PI" initialisiert wurde und b) siehe 1.

Ein senkrechter Kreiszylinder ist mit der Angabe von Radius und Höhe vollständig bestimmt. Nimmt man einen gleichseitigen Zylinder an, dann reicht sogar der Radius aus, um ihn vollständig zu bestimmen.
 
Zuletzt bearbeitet:

Dilay123

Mitglied
Könnt ihr mir bitte sagen was da bei meine equals nicht stimmt.
Java:
public boolean equals (Zylinderr z) {
    Zylinderr a = (Zylinderr)z;
    
if(this.radiusr == a.radiusr  && this.hoeheh == a.hoeheh)
        
return true;
}
return false;   
    
}
 
K

kneitzel

Gast
Aber funktioniert leider trotzdem nicht :(
Wie hast Du es denn verbessert? Du wirst ja irgendwas angepasst haben. Zeige und die Version, die jetzt nicht funktioniert...

Ansonsten können wir entweder anfangen zu raten oder wir können Dir lediglich sagen: Wenn es nicht funktioniert, dann hast Du etwas falsch gemacht....
 
K

kneitzel

Gast
Generell passt die equals Methode in keiner Weise. Du überlädst equals lediglich und überschreibst die Methode von Object nicht.

equals hat als Parameter Object.

Und dann macht man nicht einfach einen cast sondern prüft erst mittels instanceof und so. Ansonsten kommt eine ClassCastException und das ist kein gewünschtes Verhalten.
 

temi

Top Contributor
Du überlädst equals lediglich und überschreibst die Methode von Object nicht.
Darum generell immer @Override verwenden. Versuch das mal:
Java:
@Override
public boolean equals (Zylinder z) {
    // ...  
}

Du solltest dir auch noch einmal die Anforderungen an equals() durchlesen: https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

Für die Umsetzung dieser Anforderungen gibt es gängige Muster, die du leicht im Web finden kannst, z. B. http://www.tutego.de/javabuch/Java-...tml#dodtp848b6b5d-0c2d-464d-ac8e-4c765d194c9e
 
Zuletzt bearbeitet:

temi

Top Contributor
Oder anders gesagt: Folgender Code ist vollkommnen sinnlos
Da es sich beim TO um einen Anfänger handelt, hier noch der Grund:
Java:
public boolean equals (Zylinderr z) { // beim Parameter z handelt es sich bereits um den Typ "Zylinderr"
    Zylinderr a = (Zylinderr)z; // darum ist es sinnlos, diesen nochmal zu einem Zylinderr zu casten
 

Neue Themen


Oben