private Klassenvariablen

zAokiji

Mitglied
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
 

Anhänge

  • Rechteck..PNG
    Rechteck..PNG
    98,7 KB · Aufrufe: 112
  • Reckteck.PNG
    Reckteck.PNG
    107,3 KB · Aufrufe: 101
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.
Java:
r1.setLaenge(500);
 
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());
       
    }
Danke. LG
 
Wenn ich es wie oben deklariere bekomme ich eine Fehlermeldung, nicht jedoch wenn ich sie mit 200 und 400 initialisiere.
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.

Die int Variablen muss ich in der Main nochmals deklarieren?
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:
Java:
Rechteck r = new Rechteck(200, 300);
Muss ich Sie mit Null initialisieren oder gibt es noch einen anderen Weg es nicht in der Main zu machen?
int ist ein primitiver Datentyp und kein Objekt. Daher kann es nicht null werden sondern wird mit einem default Wert (0) initialisiert.
 
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
 
wirft mir der Compiler eine Exception
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.
 

Zurück
Oben