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 Leute ich bin gerade beim Lernen und bin grade an dem Beispiel "private Klassenvariable mit get und set. Ich versuche ein Objekt Rechteck zu erzeugen, was leider nicht funktioniert. Im Buch wir dies leider nicht genau erklärt bei mir sind nun ein paar Fehler vorhanden die ich nicht wegbekomme. Dake für die Hilfe. LG
Als erstes: Code bitte nicht als Bild sondern in Code-Tags [code=Java]Dein Code[/code] posten. Dann kann man ihn besser zitieren / lesen
Zu deinem Problem:
Du hast in der Klasse Rechteck einen Konstruktor mit 2 Parametern angelegt. Rechteck(double laenge, double breite). Beim erzeugen eines Rechteck-Objektes musst du also auch im Konstruktor 2 Argumente mitgeben.
Java:
int laenge = 200;
int breite = 400;
Rechteck r1 = new Rechteck(laenge, breite);
Das gleiche gilt quasi für deine Setter-Methoden. Deine Setter bekommen jeweils einen Parameter, den du zwischen den () - Klammern angeben musst. Du kannst hier nicht mit dem Zuweisungsoperator (=) arbeiten.
Hi danke für den Hinweis, werde in Zukunft den Code so posten.
Danke das mit den Setter-Methoden mach sinn (funktioniert nun auch bei mir).
Es macht auch Sinn, dass ich dem Konstruktor die zwei Argumente mitgeben muss. Ich habe jedoch nicht verstanden warum ich nicht einfach reicht zwei Integer zu deklarieren.
Java:
int laenge;
int breite;
Wenn ich es wie oben deklariere bekomme ich eine Fehlermeldung, nicht jedoch wenn ich sie mit 200 und 400 initialisiere.
Die int Variablen muss ich in der Main nochmals deklarieren?
Muss ich Sie mit Null initialisieren oder gibt es noch einen anderen Weg es nicht in der Main zu machen?
Java:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int laenge = 200;
int breite = 400;
Rechteck r1 = new Rechteck(laenge, breite);
//breite = r1.setBreite(breite);
r1.setLaenge(zahlenEingabe(scan, "Bitte geben Sie die Länge ein: "));
r1.setBreite(zahlenEingabe(scan, "Bitte geben Sie die Breite ein: "));
scan.close();
System.out.println("Fläche: " + r1.berechneFlaeche());
System.out.println("Umfang: " + r1.berechneUmfang());
}
Du sagst es schon selber. Du musst die Variablen initialisieren, ergo einen Wert zuweisen. Wenn du die Variablen dem Konstruktor übergibt werden die Werte genommen und eine Kopie der Werte in den Konstruktor übergeben. Wenn diese keinen Wert haben, weil du sie nicht initialisierst, kommt ein Fehler.
Nicht nochmals. Die beiden Variablen haben nichts mit den aus der Klasse Rechteck zu tun. Du musst sie auch nicht anlegen sondern kannst die Werte direkt übergeben:
Passt danke bin noch neu im Objektorientiert, deshalb ist es für mich oft noch ein bisschen schwer.
Ok die int müssen initialisiert werden. Ich übergeben im Moment 1 und 1 als default Wert, da wenn ich zwei mal 0 übergebe wirft mir der Compiler eine Exception (siehe ganz 2.ten Code teil). Würde der Code so passen oder was gibt es auch der Sicht eines Erfahrenen noch zu verbessern
1.
Java:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//int laenge = 200;
//int breite = 400;
Rechteck r1 = new Rechteck(1, 1);
//breite = r1.setBreite(breite);
2.
Java:
//Konstruktor
public Rechteck(double laenge, double breite) {
setLaenge(laenge);
setBreite(breite);
}
//Getter und Setter für Lange
public double getLaenge() {
return laenge;
}
public void setLaenge(double laenge) {
if(laenge<=0)
throw new IllegalArgumentException("Die Länge muss größer als Null sein!");
this.laenge = laenge;
}
[/java]
Danke.LG
Dein Programm wirft die Exception zur Laufzeit. Das hat nichts mit dem Compiler zu tun.
Nicht gut ist es, im Konstruktor einer erweiterbaren Klasse direkt oder indirekt überschreibbare Methoden zu verwenden.
In Deiner main-Methode musst Du nicht erst ein Rechteck mit irgendwelchen Default-Werten erzeugen. Stattdessen kannst Du die vom Scanner erhaltenen Werte einfach in Variablen zwischenspeichern und anschließend mit diesen Variablen das Rechteck erstellen.