Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi ich habe mal wieder ein Problem!
Ich muss folgende Aufgabe lösen.
Ich soll ein Rechteck im Sinne der OO -Programierung erstellen. Mit 2 Konstruktoren.
Dazu eine get und set methode für Breite und Höhe.
Dazu soll es noch 2 Methoden geben. Die eine Prüft ob das Rechteck gleich lange Seiten hat und die andere gibt das Rechteck aus.
Ich denke ich habe das Grundgerüst aber weiter komm ich einfach nicht. Blockade im Kopf!!!???:L
Java:
public class Rechteck {
private int höhe;
private int breite;
boolean quadrat= true;
public Rechteck (int höhe, int breite){
this.höhe=höhe;
this.breite=breite;
}
public Rechteck (){
}
Rechteck r = new Rechteck(5,6); // neues objet Rechteck r
//Methoden get und set
public void setBreite(int breite) {
this.breite = breite;
}
public int getBreite() {
return breite;
}
public void setHöhe(int höhe) {
this.höhe = höhe;
}
public int getHöhe() {
return höhe;
}
public boolean istQuadrat( Rechteck getHöhe, Rechteck getBreite, Rechteck r){
for (r.getHöhe() == r.getBreite()){
return true;
for ((r.getHöhe) != (r.getBreite)){
return false;
}
public void getTyp(){
}
}
}
public static void main (String[] args){
Rechteck r = new Rechteck(5,6);
}
}
Zuerst einmal solltest Du die Methode isQuadrat() etwas umschreiben:
Java:
public boolean istQuadrat(){
if (höhe == breite){
return true;
}
return false;
}
for hat da nichts zu suchen, weil es sich nicht um for-Schleifen handelt (lies das Thema for-Schleifen noch mal nach).
Auf die Getter musst du innerhalb der Klasse nicht zugreifen. Da kannst Du direkt die Variablen nehmen. (Getter brauchst Du erst, wenn Du beispielsweise die Höhe in der Mainfunktion auslesen willst)
Zeile 14 kannst Du weglassen, das hast Du schon in der Main.
Für die Ausgabe des Rechtecks reicht es, wenn Du beispielsweise einen String zurückgibst, der Höhe und Breite enthält.
Das Rechteck zu übergeben, ist unnötig. Du schreibst doch in der Main:
if(r.isQuadrat()) { ... }
Damit hast Du schon angegeben, welches Rechteck geprüft werden soll.
HI also das Rechteck bekomme ich jetzt hin .
Aber ich habe das Gefühl, dass ich die get und set Methode irgendwie nicht richtig verwende bzw. garnicht.
und wenn ich die methode istQuadrat aufrufe gibt er mir nichts aus bzw will dass ich den ruckgabetyp in der main zu boolean ändere.
Außer ich schreibe die methode in der main um:
Java:
public class Rechteck {
private static int höhe;
private static int breite;
public Rechteck (int höhe, int breite){
this.höhe=höhe;
this.breite=breite;
}
public Rechteck (){
}
//Methoden get und set
public void setBreite(int breite) {
this.breite = breite;
}
public int getBreite() {
return breite;
}
public void setHöhe(int höhe) {
this.höhe = höhe;
}
public int getHöhe() {
return höhe;
}
public boolean istQuadrat(int breite,int höhe){
if (höhe == breite){
return true;
}else
return false ;
}
public void getTyp(int breite,int höhe){
for (int i = 1; i< höhe;i++) {
System.out.println("");
System.out.print("+");
for (int j = 1; j<= breite; j++)
System.out.print("+");
}
}
public static void main (String[] args){
Rechteck r = new Rechteck(5,6);
r.getTyp(5,6);
System.out.println("");
// r.istQuadrat(5,6);
if (r.istQuadrat(5,6)){
System.out.println("true");
}
else
System.out.println("false");
}
}
}
Ja danke!Hab ich geändert.
Aber ich bekomme trotzdem keinen Ausgabe !
Ich brauch ja ein true oder ein false.
Und ob ich die get und set methoden für mein Rechteck richtig benutze bin ich mir auch unsicher.
wenn Du einmal dein Objekt der Klasse Rechteck erzeugt hast - hier ja mit
new Rechteck(5,6)
dann brauchst du die get-Methoden nicht nochmal mit Höhe und Breite zu versorgen, da du ja die get-Methoden dieses Objekts ansprichst. Also reicht folgendes
Java:
...
public boolean istQuadrat() {
return hoehe == breite;
}
public boolean getTyp() {
...
}
...
Ferner hast du die Variablen hoehe und breite als static deklariert, womit es sie zu statischen Klassenvariablen macht und nicht zu Objektvariablen.
Wie bereits erwähnt brauchst du innerhalb aller Methoden der Klasse selbst nicht per Get-Methode auf die Variablen des Objekts zuzugreifen. Dies musst du dann machen, wenn du von außen diese Variablen direkt abfragen willst, also z. B. wenn sich deine main-Methode in einer anderen Klasse befinden würde.
Du könntest auch bei der "Erstellung" eines Rechteckes den Standard-Konstruktor der Klasse Rechteck aufrufen (also ohne die Höhe und die Breite zu übergeben) und anschließend die Höhe und Breite über die beiden set-Methoden erstmalig setzen.
Die Set-Methoden benutzt du ja hier eigentlich gar nicht. Du hast sie deklariert, was ja auch erstmal nicht verkehrt ist. Die Set-Methoden sind dafür da, um Attribute einer Objektinstanz nach der Konstruktion zu ändern:
Java:
public class Rechteck {
private int hoehe, breite;
public Rechteck(int hoehe, int breite) {
this.hoehe = hoehe;
this.breite = breite;
}
public void setHoehe(int hoehe) {
this.hoehe = hoehe;
}
public int getHoehe() {
return hoehe;
}
public void setBreite(int breite) {
this.breite = breite;
}
public int getBreite() {
return breite;
}
public boolean istQuadrat() {
return breite==hoehe;
}
public static void main(String[] args) {
Rechteck r = new Rechteck(5, 6);
System.out.println("Hoehe: " + r.getHoehe());
System.out.println("Breite: "+r.getBreite());
if(r.istQuadrat())
System.out.println("Das Rechteck ist ein Quadrat");
else
System.out.println("Das Rechteck ist kein Quadrat");
//Nachträgliche Änderung über Set-Methoden
r.setHoehe(7);
r.setBreite(7);
System.out.println("Hoehe: " + r.getHoehe());
System.out.println("Breite: "+r.getBreite());
if(r.istQuadrat())
System.out.println("Das Rechteck ist ein Quadrat");
else
System.out.println("Das Rechteck ist kein Quadrat");
}
}
Die Ausgabe wäre:
Hoehe: 5
Breite: 6
Das Rechteck ist kein Quadrat
Hoehe: 7
Breite: 7
Das Rechteck ist ein Quadrat
ein kleiner Hinweis noch zu den Set-Methoden. Gerade bei deiner Klasse Rechteck macht es Sinn, die hoehe- und breite-Variablen durch die Set-Methoden zu "kapseln". In diesen Methoden könntest du dann nämlich auch so Sachen abfangen, wie negative Werte für Höhe und Breite, was ja fachlich für ein Rechteck nicht möglich sein sollte.
Java:
public void setHoehe(int hoehe) {
if(hoehe < 0) throw new IllegalArgumentException("Höhe muss >= 0 sein");
this.hoehe = hoehe;
}
Und noch ein kleiner Hinweis, zu der Methode getTyp:
Du hast dort die Reihenfolge der Parameter im Vergleich zu der im Konstruktor vertauscht. Diese brauchst du zwar eh nicht, aber wenn du sie entfernst und die Methode mit r.getTyp(); aufrufst sollte dir etwas auffallen :wink:.