Assoziationen

nub12

Mitglied
Hallo Leute,
ich bin ganz neu in Java und besuche eine HTL Informatik in Österreich.
Hier mein Problem:
Wir müssen aktuell mit Assoziationen arbeiten und nutzen aktuell BlueJ als Entwicklungsplattform.
Konkret:
Unsere Aufgabe ist es dass der jeweilige "Besitzer" ein Haus mit einem anderem Besitzer tauscht, hier ein Beispiel wie wir es im Unterricht gemacht haben, der ganze Code (unter anderem mit Hauskauf usw).

Problemstelle ist "public void tausche (Besitzer wem)":

Java:
public class Besitzer
{
    private double kassa;
    private Haus haus;

    public Besitzer()
    {
        setKassa(1000);
        setHaus(null);
    }

    public Besitzer(double kassa, Haus haus)
    {
        setKassa(kassa);
        setHaus(haus);
    }

    public void setKassa(double kassa)
    {
        this.kassa = kassa;
    }

    public void setHaus(Haus haus)
    {
        this.haus = haus;
    }

    public double getKassa()
    {
        return kassa;
    }

    public Haus getHaus()
    {
        return haus;
    }

    public void printBesitzer()
    {
        System.out.println("Besitzer:\t" + kassa + "\t" + haus);
    }

  public void tausche(Besitzer wem)
    {
        if (wem != null)
        {
            if (haus != null)
            {
                if (wem.getHaus() != null)
                {
                   wem.getHaus().setBesitzer(null);
                   wem.getHaus().setBesitzer(this);
              
               
                }
           
            }
            else
            {
                System.out.println ("Hat kein Haus!");
            }
        }
        else
        {
            System.out.println ("Kein Tauschpartner!");
        }
    }

    public void kauft(Haus neu)
    {
        if (neu != null)
        {
            if (haus == null)
            {
                if (neu.getBesitzer() != null)
                {
                    if (kassa >= neu.getPreis())
                    {
                        setKassa(kassa-neu.getPreis());
                        neu.getBesitzer().setKassa(neu.getBesitzer().getKassa()+neu.getPreis());
                        neu.getBesitzer().setHaus(null);
                        setHaus(neu);
                        neu.setBesitzer(this);
                    }
                    else
                    {
                        System.out.println("Fehler: kein Geld!");
                    }
                }
                else
                {
                    System.out.println("Fehler: Haus hat keinen Vorbesitzer!");
                }
            }
            else
            {
                System.out.println("Fehler: hat schon ein Haus!");
            }
        }
        else
        {
            System.out.println("Fehler: kein Haus!");
        }
    }

    public void bekommt(Haus neu)
    {
        if (neu != null)
        {
            if (haus == null)
            {
                if (neu.getBesitzer() != null)
                {
                    neu.getBesitzer().setHaus(null);                 
                }
                setHaus(neu);
                haus.setBesitzer(this);
            }
            else
            {
                System.out.println("Fehler: hat schon ein Haus!");
            }
        }
        else
        {
            System.out.println("Fehler: kein Haus!");
        }
    }
}

Das sieht dementsprechend so aus:

http://www.pic-upload.de/view-32061442/bj.png.html

Bin langsam verzweifelt, vielleicht kann mir ja wer helfen.
Achja, Schleifen, Arrays und co. haben wir noch nicht gemacht.

Wenn ihr mehr Infos braucht lasst es mich bitte wissen!
LG
 
Zuletzt bearbeitet:

nub12

Mitglied
Nun, in BlueJ erstellen wir 2 Besitzer und 2 Häuser.
Besitzer 1 erhält Haus 1, Besitzer 2 erhält Haus 2.
Beim Tausch soll Besitzer 1 Haus 2 bekommen und Besitzer 2 Haus 1.
 

Jardcore

Top Contributor
Das hört sich nach einem einfachen Ringtausch an, bei dem du ein zusätzliches temporäres Objekt brauchst.
Java:
public void tausche(Besitzer wem) {
    Besitzer temp = new Besitzer(wem.getKassa(), wem.getHaus());

    wem.setHaus(this.getHaus());
    wem.getHaus().setBesitzer(this);

    this.setHaus(temp.getHaus());
    this.getHaus().setBesitzer(this);
}

Wobei man hier im setter von Haus (setHaus()) auch einfach mal den Besitzer setzen könnte.

Dann würde das so aussehen...
Java:
public void setHaus(Haus haus) {
    this.haus = haus;
    getHaus().setBesitzer(this);
}

Java:
public void tausche(Besitzer wem) {
    Besitzer temp = new Besitzer(wem.getKassa(), wem.getHaus());
    wem.setHaus(this.getHaus());
    this.setHaus(temp.getHaus());
}

Oder du machst das mit einem temoprären Haus.
Java:
public void tausche(Besitzer wem) {
    Haus tempHaus = new Haus(wem); // in Annahme, das Haus diesen Konstruktor hat.
    wem.setHaus(this.getHaus());
    this.setHaus(tempHaus);
}
 

nub12

Mitglied
Hallo Leute,
so, im Unterricht hat der Professor das so gemacht:
Code:
public void tausche(Besitzer wem)
    {
        if (wem != null)
        {
            if (haus != null)
            {
                if (wem.getHaus() != null)
                {
                    Haus h;
                    double differenz;
                    differenz = wem.getHaus().getPreis() - haus.getPreis();
                    if (uberweisen(wem, differenz) == true)
                    {
                        haus.setBesitzer(wem);
                        wem.getHaus().setBesitzer(this);
                        h = haus;
                        setHaus(wem.getHaus());
                        wem.setHaus(h);
                    }
                }
                else
                {
                    System.out.println("Fehler: andere besitzt kein Haus!");
                }
            }
            else
            {
                System.out.println("Fehler: ich besitzte kein Haus!");
            }
        }
        else
        {
            System.out.println("Fehler: kein Besitzer!");
        }
    }

Inkl. Geldüberweisung.

Ich kann den Code zwar einigermaßen verstehen, aber von selber drauf kommen würde ich wohl kaum.
Gibt es zu solchen Assoziationen irgendwelche gute Lernmittel?
 

mrBrown

Super-Moderator
Mitarbeiter
Ich kann den Code zwar einigermaßen verstehen, aber von selber drauf kommen würde ich wohl kaum.
Das ist nicht wirklich mehr als das, was du selbst oben schon gesagt hast: Das Haus von Besitzer 1 geht an 2, dann das Haus von 2 an 1.
Was da mehr ist, ist das setzen der Besitzer für die Häuser, sowas muss man einfach im Hinterkopf behalten (und wissen das es nötig ist, oftmals ist es das nicht) (oder schreibt die setHaus-Funkionen entsprechend, dann muss man das an der Stelle nicht beachten und wird die zig Doppelungen los).
(Und das Geld, aber dazu hätte man erstmal wissen müssen das es nötig ist)
 

Ähnliche Java Themen

Neue Themen


Oben