die ist mein erster Eintrag auf www also bitte ich euch um ein bisschen Nachsicht mit mir .
und zwar beschäftige ich mich seit Anfang dieser Woche mit der programmiersprache Java und hab nun ein kleines Problem. Und zwar soll eine Klasse erstellt werden, die ein Rechteck beschreibt und zusätzlich eine Klasse RechteckAnwendung die dann auf die Attribute und Methoden aus der Klasse Rechteck zugreift, sieht bei mir im Moment folgendermaßen aus:
public class Rechteck{
public int laenge;
public int breite;
public int berechneFlaeche(){
return laenge*breite;
}
public int berechneUmfang(){
return 2*laenge+2*breite;
}
}
Dies funktioniert soweit und ich kann in meiner Anwedungs Klasse die Methoden dann auch aufrufen und auslesen.
Jetzt soll ich aber zusätzlich eine Methode erstellen, die mir sagt ob das von mir erstellte Objekt (bspw. rechteck.Rechteck) ein Quadrat ist. Kann mir jemand sagen wie ich eine solche Methode relativ einfach in meine Klasse Rechteck einfügen und dann in meiner Anwendungsklasse prüfen und auslesen kann?
Hoffe die Frage war einigermaßen verständlich und bedanke mich im voraus.
Sebastian
Was unterscheidet ein allgemeines Rechteck von einem Quadrat? Ein Quadrat ist ein Rechteck, bei dem nicht nur jeweils 2 Seiten gleich sind sondern alle vier.
public boolean istQuadrat() {
return (this.laenge == this.breite);
}
Danke dir! Der mathematische Hintergedanke war mir schon klar, ich hab nurnoch so meine Probleme die richtigen Datentypen zu verwenden oder in meiner Anwendungsklasse passende Ausgaben zu erzeugen. Aber probieren geht über studieren.
Hi, die Methode braucht nur Informationen des Objekts, also keine Parameter. Rückgabewert ist true oder false, also vom Typ boolean.
Ein Quadrat hat die gleiche Länge wie breite.
Also folgende Methode:
dies ist relativ einfach.
Aber zuvor kurz zu deiner Klasse.
Dies ist dein Original:
public class Rechteck{
public int laenge;
public int breite;
public int berechneFlaeche(){
return laenge\*breite;
}
public int berechneUmfang(){
return 2\*laenge+2\*breite;
}
}
Das ist schon so ok und funktioniert, aber ein paar kleine Änderungen.
Warum keinen Konstruktor, welcher schon Breite und Länge verlangt? Ja, ist nicht notwendig…
Länge und Breite sollten nicht public sein. Ändern, auslesen und Berechnen sollte man nur über Setter/Getter machen.
Mit den Änderungen;
public class Rechteck{
private int laenge;
private int breite;
public int getLaenge(){
return laenge;
}
public int getBreite() {
return breite;
}
public void setLaenge(int inputLaenge) {
if (inputLaenge \> 0) {
laenge = inputLaenge;
}
}
public void setBreite(int inputBreite) {
if (inputBreite \> 0) {
breite = inputBreite;
}
}
public int getFlaeche(){
return laenge\*breite;
}
public int getUmfang(){
return 2\*laenge+2\*breite;
}
}
Nun, wie ist das nun mit dem Quadrat? Ein Rechteck ist ein Quadrat, wenn Länge und Breite gleich gross sind.
Also folgende Methode (welche dann eingefügt werden muss) gibt true zurück, wenn das Rechteck ein Quadrat ist.
public boolean isQuadrat() {
if (laenge == breite) {
return true;
} else {
return false;
}
}
Der Aufruf erfolgt dann zum Beispiel mit rechteck.isQuadrat() und gibt true oder false zurück
Hallo Sebastian,
die Methode, die du implementieren willst soll ja quasi die Antwort auf eine Entscheidungsfrage geben: Quadrat? Ja oder Nein?
Für solche Sachen nimmst du den Typ „boolean“. Methoden dieses Typs geben (anders als die beiden anderen Methoden mit ganzzahligem Rückgabewert) nur wahr oder falsch zurück.
Darin fragst du dann einfach ab ob dein Rechteck ein Quadrat ist, sprich, ob Länge und Breite gleich lang sind:
public boolean istQuadrat(){
if (laenge == breite)
return true;
else
return false;
}
Oder kürzer:
public boolean istQuadrat(){
return (laenge == breite);
}
public class Rechteck
{
…
public boolean istQuadrat() {
return laenge == breite;
}
}
Viel Spass damit!
Ein Tip noch: die Variablen in einer Klasse, die Instanzvariablen sollten private sein und dann sollte es je einen Setter (setLaenge(…), setBreite(…)) und je einen Getter (getLaenge(), getBreite()) geben.
this ist ein Zeiger auf das eigene Objekt. laenge und breite sind ja bei dir attribute des Objekts und über den this zeiger spricht man diese explizit an.
Deine Methode könnte ja (zumindest theoretisch) so aussehen:
jetzt würde die methode das gleiche machen und zusätzlich noch „1 2“ ausgeben.
hier macht es nicht unbedingt sinn this zu verwenden, aber irgendwie hab ich mir angewöhnt, bei attributen des objektes den this zeiger zu verwenden.
Man nennt es auch verdecken von attributen, für den Compiler sind es jetzt 2 vollkommen verschiedene variablen. Anfänger verwirrt man wahrscheinlich nur damit und ich hätte es nicht schreiben sollen… Aber macht der Gewohnheit
Ich würde empfehlen eine Methode mit dem Rückgabetyp „bool(ean)“ zu entwerfen, mit einer einzigen „if-else“-Abfrage: Wenn laenge==breite dann true, sonst false.