Einstieg Objektorientierung

luluuxs

Aktives Mitglied
Heyho, ich hänge an einer meiner Aufgaben schon ziemlich lange und habe das Gefühl, dass nur eine Kleinigkeit verkehrt ist. Wir sind in die Objektorientierung eingestiegen und hatten folgende Aufgabenstellung:
"Schreiben Sie ein Java-Programm Bucket.java, welches eine Klasse Bucket, deren Objekte Eimer darstellen, mit folgenden Attributen und Methoden deklariert:
• Bucket-Objekte haben jeweils ein Volumen (double volume) und einen Füllstand (double fillLevel) in Liter.
• Die Methoden double getFillLevel() und void setFillLevel(double level) sollen den Füllstand des Eimers zurückgeben bzw. setzen.
• Die Methode void fill() soll den Eimer vollständig füllen.
• Die Methode void merge(Bucket other) soll den Inhalt des Eimers other in diesen Eimer schütten. Würde der Eimer überlaufen, so geht der verschüttete Inhalt verloren. other soll nach Ausführung einen Füllstand von 0 haben.
Schreiben Sie zusätzlich eine main-Methode, welche zwei Eimer jeweils mit einem Volumen von 10 und einem Füllstand von 5 erzeugt. Rufen Sie auf dem zuerst erzeugten Objekt die Methode fill() auf und geben Sie den Füllstand dieses Objekts aus. Nutzen Sie zur Abfrage des Füllstands die getFillLevel()-Methode. Rufen Sie danach die Methode merge auf dem zuletzt erzeugten Objekt, mit dem zuerst erzeugten Objekt als Parameter, auf.
Beispielausgabe:
> java Bucket Fuellstand von Eimer 1 nach fill: 10.0
Fuellstand von Eimer 1 nach merge: 0.0
Fuellstand von Eimer 2 nach merge: 10.0"

Mein bisheriger Versuch sieht folgendermaßen aus:
Hat jemand einen Tipp, oder kann mir bei meinem Problem helfen ?
LG


[CODE lang="java" title="Bucket"]public class Bucket {

double level;
static int numBuckets;
static double fillLevel = 5;
static double volume = 10;

public Bucket(double volume, double fillLevel) {
numBuckets++;
}

double getFillLevel() {
return fillLevel;
}

void setFillLevel(double level) {
fillLevel = level;
}

void fill() {
level = volume;
setFillLevel(level);
}

void merge(Bucket other) {
double o = other.getFillLevel();
double t = getFillLevel();
t = t + o;
if (t > volume) {
t = volume;
}
o = 0;
}

public static void main(String[] args) {
Bucket one = new Bucket(volume, fillLevel);
Bucket two = new Bucket(volume, fillLevel);
one.fill();
Out.println("Fuellstand von Eimer 1 nach fill: " + one.getFillLevel());
two.merge(one);
Out.println("Fuellstand von Eimer 1 nach merge: " + one.getFillLevel());
Out.println("Fuellstand von Eimer 2 nach merge: " + two.getFillLevel());
}
}
[/CODE]
 
Generell sollte dein Programm nur ein "static" haben und zwar bei public static void main()

Dann hat deine Klasse Bucket noch zwei Instanzvariablen, welche nicht von der Aufgabe verlangt werden.

Und deine Methode merge() ändert nur die dort deklarierten lokalen Variablen t und o. Am Ende der Methode werden die ungültig, damit macht die Methode effektiv gar nichts. Du musst schon auch die jeweiligen Instanzvariablen anpassen.
 
Zuletzt bearbeitet:
Hallo beim erzeugen deiner Objekte musst du schon die werte die im Objekt gespeichert werden sollen mitgeben.
Java:
Bucket one = new Bucket(10.0, 5.0);

Dein Konstruktor macht auch nicht das was er soll. Nämlich die übergeben Werte in den InstanzVariablen speichern . Du gibt sie immer vor.
Somit ist jedes Objekt gleich. Was du eigentlich nicht willst.
Egal welche Werte du beim Objekt erzeugen mit gibst.



Java:
    double level;
    int numBuckets;
    double fillLevel ;
    double volume ;

    public Bucket(double volume, double fillLevel) {
        this.volume = volume;
        this.fillLevel = fillLevel;
        numBuckets++; //Was das Soll kann ich nicht nachvollziehen
    }
 
Zuletzt bearbeitet:
Hallo beim erzeugen deiner Objekte musst du schon die werte die im Objekt gespeichert werden sollen mitgeben.
Java:
Bucket one = new Bucket(10.0, 5.0);

Dein Konstruktor macht auch nicht das was er soll. Nämlich die übergeben Werte in den InstanzVariablen speichern . Du gibt sie immer vor.
Somit ist jedes Objekt gleich. Was du eigentlich nicht willst.
Egal welche Werte du beim Objekt erzeugen mit gibst.



Java:
    double level;
    int numBuckets;
    double fillLevel ;
    double volume ;

    public Bucket(double volume, double fillLevel) {
        this.volume = volume;
        this.fillLevel = fillLevel;
        numBuckets++; //Was das Soll kann ich nicht nachvollziehen
    }
Vielen Dank,

habe vergessen, dass ich mein Aus kommentierten Code in der merge-Methode mit hätte kopieren sollen..., sorry
Java:
void merge(Bucket other) {
        double o = other.getFillLevel();
        double t = getFillLevel();
        t = t + o;
        if (t > volume) {
            t = volume;
        }
        o = 0;
        other.setFillLevel(o);
        setFillLevel(t);
    }
 
Generell sollte dein Programm nur ein "static" haben und zwar bei public static void main()

Dann hat deine Klasse Bucket noch zwei Instanzvariablen, welche nicht von der Aufgabe verlangt werden.

Und deine Methode merge() ändert nur die dort deklarierten lokalen Variablen t und o. Am Ende der Methode werden die ungültig, damit macht die Methode effektiv gar nichts. Du musst schon auch die jeweiligen Instanzvariablen anpassen.
Danke sehr
 

Zurück
Oben