# Assoziation zwischen 2 klassen



## sheep (26. Dez 2009)

```
public class Person {
private String name;
private String vorname;
public void setName (String n) {
name = n;
}
public String getName() {
return name;
}
public void setVorname (String n) {
vorname = n;
}
public String getVorname() {
return vorname;
}
}

public class Konto {
private Person person;
private double kontostand;
public Konto (String name, String vorname, float kontostand) {
   
}
 public Person getLinkPerson(){
    return person;
    }

    public void setLinkPerson(Person person){
     this.person = person;
    }

    
    public double getKontostand(){
      return kontostand;
      }
      
      }

Konto kenn ja die Personen zu dem jeweiligen Konto.nur wie gehe ich hier mit dem konstruktor um und wieso hat kontostand auf einmal float als datentyp?
```


----------



## BrauniDeluxe (26. Dez 2009)

```
public class Person {
private String name;
private String vorname;
public void setName (String n) {
name = n;
}
public String getName() {
return name;
}
public void setVorname (String n) {
vorname = n;
}
public String getVorname() {
return vorname;
}
}
```


```
public class Konto {
private Person person;
private double kontostand;
public Konto (String name, String vorname, float kontostand) {
   
}
 public Person getLinkPerson(){
    return person;
    }

    public void setLinkPerson(Person person){
     this.person = person;
    }

    
    public double getKontostand(){
      return kontostand;
      }
      
      }
```



sheep hat gesagt.:


> Konto kenn ja die Personen zu dem jeweiligen Konto.nur wie gehe ich hier mit dem konstruktor um und wieso hat kontostand auf einmal float als datentyp?



Hier mal als Code 

Konstruktor macht so keinen Sinn .. da ja die Werte nicht weiter gegeben werden.
Warum dem Konstruktor nicht mit Person bestücken ?
Double oder float musst du halt so anpassen wie du es brauchst.

Eventuell auch mal genau sagen was du machen willst ... kommt nicht ganz klar raus


----------



## sheep (26. Dez 2009)

Die nachfolgende unvollständige Klasse “Konto” beinhaltet den Kontostand und
wird einer Person zugeordnet. Um eine Person zu beschreiben, wird die Klasse
“Person” mit den Instanzvariablen “name” und “vorname” verwendet. Die Klasse
“KontoTest” wird zum Testen der Klasse “Konto” verwendet. Sie beinhaltet
neben der “main()”-Methode eine weitere Klassenmethode mit der Bezeichnung
“kontoVergleich()”. Dieser Methode werden zwei Objekte der Klasse “Konto”
übergeben. Die übergebenen Konten werden dann auf die Höhe des Kontostands
hin verglichen und es wird ausgegeben, welches Konto mehr Geld enthält. Vervollständigen
Sie die fehlenden Teile des Programms.

Das soll gemacht werden ^^.code:

```
public class KontoTest {
public static void kontoVergleich ( ... ) {
if ( ... ) {
System.out.println (k1.getName()
+ " hat mehr Geld auf dem Konto als " + k2.getName());
} else {
System.out.println (k2.getName()
+ " hat mehr Geld auf dem Konto als " + k1.getName());
}
}
public static void main (String[] args) {
Konto konto1 = new Konto ("Mueller", "Hans", 500);
Konto konto2 = new Konto ("Krause", "Peter", 1500);
Konto konto3 = new Konto ("Boehm", "Harald", 330);
kontoVergleich (konto1, konto2);

kontoVergleich (konto2, konto3);
kontoVergleich (konto1, konto3);
}
}
// Datei: Person.java
public class Person {
private String name;
private String vorname;
public void setName (String n) {
name = n;
}
public String getName() {
return name;
}
public void setVorname (String n) {
vorname = n;
}
public String getVorname() {
return vorname;
}
}
// Datei: Konto.java
public class Konto {
private Person person;
private double kontostand;
public Konto (String name, String vorname, float kontostand) {
...
}
...
}
```

ich denke an den "..." stellen,soll code hinzugefügt werden


----------



## BrauniDeluxe (26. Dez 2009)

Jetzt wird es klarer.

Erzeuge im Konstruktor von Konto eine neue Person und weise die Namen zu. Weise danach den Kontostand dazu.

Zum Vergleich : Vergleiche die beiden Kontostände einfach miteinander und gebe je nach Ergebnis den richtigen Text aus.

Die Aufgabe ist wirklich ziemlich einfach, es nützt dir nichts hier die fertige Lösung zu präsentieren. Das bisschen wirst du noch selbst machen müssen 

Gruss
Dennis


----------



## sheep (26. Dez 2009)

muss ich dann 3 personen erzeugen,da in der testklasse es 3 konten mit 3 verschiedenen personen gibt?


----------



## sheep (26. Dez 2009)

ich muss ja die inhalte des objekts prüfen und nicht die referenz: daher equals:


```
public static void kontoVergleich (kontostand k,kontostand s  ) {
if (k(equals)(s))  ) {
System.out.println (k1.getName()
+ " hat mehr Geld auf dem Konto als " + k2.getName());
} else {
System.out.println (k2.getName()
+ " hat mehr Geld auf dem Konto als " + k1.getName());
}
```

ich hab das mal gebastelt.nur das funzt nich so ganz


----------



## eRaaaa (26. Dez 2009)

```
if (k(equals)(s))
```
??

=>


```
if (k.equals(s))
```
so vllt?


----------



## sh33p (26. Dez 2009)

```
private Person person;
private double kontostand;
public Konto (String name, String vorname, float kontostand) {
   Person p1 = new Person();
   Person p2 = new Person();
   Person p3 = new Person();
   p1.setName("Müller");
   p1.setVorname("Hans");
   p2.setName("Krause");
   p2.setVorname("Peter");
   p3.setName("Boehm");
   p3.setVorname("Harald");


}
```
jetzt möchte ich den kontostand setzen. dieser ist aber vom typ float und ich kann nur set und get methoden vom typ double schreiben.das verwirrt mich^^


----------



## eRaaaa (26. Dez 2009)

also erstmal, solltest du nicht 3 Personen im Konstruktor erstellen, sondern wohl nur eine und diese Person soll den Namen erhalten, dem der Konstruktor übergeben wird! (macht doch so gar keinen Sinn) Des weiteren soll die Person dann dem Konto zugeordnet werden, das hat du ja auch nicht!

vllt so? :

```
public Konto (String name, String vorname, float kontostand) {
Person p1 = new Person();
p1.setName(name);
p1.setVorname(vorname);
this.person = p1;
this.kontostand = kontostand;
}
```


Wieso einmal float und einmal double als Datentyp gewählt wurde, weiß doch eig. wohl nur du ?


----------



## BrauniDeluxe (26. Dez 2009)

Also erstmal nicht equals ... willst ja nen grösser/kleiner Vergleich vom Kontostand machen 
Dafür auf den Kontostand vom Konto zugreifen (z.B. getter methode).

Zweitens im Konstruktor nicht 3 Personen anlegen sondern eine .. die Person die als Membevariable in Konto ist. 

sowas wie 
	
	
	
	





```
person = new Person();
person.setName(name)
...
```

In der Testklasse  3 Kontos anlegen.


----------



## sh33p (26. Dez 2009)

thx braunideluxe

@ eraaaa

das hat mein prof so in der aufgabe vorgegeben . hm vielleicht tippfehler?
sonst machts keinen sinn^^:lol:


----------



## sh33p (27. Dez 2009)

```
public class Konto {
private Person person;
private double kontostand;
public Konto (String name, String vorname, double kontostand) {

person = new Person();
person.setName(name);
person.setVorname(vorname);


}
 public Person getLinkPerson(){
    return person;
    }

    public void setLinkPerson(Person person){
     this.person = person;
    }
        public double getKontostand(){
          return kontostand;
        }
        public void setKontostand(double kontostand){
          this.kontostand = kontostand;
        }

public class KontoTest {
public static void kontoVergleich (Konto k1 ,Konto k2 ) {
if (k1.getKontostand() > k2.getKontostand()  ) {
System.out.println (k1.getName()
+ " hat mehr Geld auf dem Konto als " + k2.getName());
} else {
System.out.println (k2.getName()
+ " hat mehr Geld auf dem Konto als " + k1.getName());
}
}
public static void main (String[] args) {
Konto konto1 = new Konto ("Mueller", "Hans", 500);
Konto konto2 = new Konto ("Krause", "Peter", 1500);
Konto konto3 = new Konto ("Boehm", "Harald", 330);
/*kontoVergleich (konto1, konto2);
kontoVergleich (konto2, konto3);
kontoVergleich (konto1, konto3);   */
}
}
public class Person {
private String name;
private String vorname;
public void setName (String n) {
name = n;
}
public String getName() {
return name;
}
public void setVorname (String n) {
vorname = n;
}
public String getVorname() {
return vorname;
}
}
```

zur vergleichsmethode: ich vergleiche also die kontostände. anschließend sollen ja die namen ausgegeben werden.nur sind die set und get methode für name in person und nicht in konto.
wie erreiche ich jetzt,das ich get-methode für konto verwenden kann?


----------



## eRaaaa (27. Dez 2009)

Jedes Konto hat doch eine Referenz auf die Person, schreib dir also auch eine getter-Methode dafür, dann kannst du einfach:

```
k1.getPerson().getName()
```
aufrufen

/edit: ach du hast ja schon eine getter dafür

```
getLinkPerson()
```

also ersetz getPerson durch getLinkPerson()


----------



## sh33p (27. Dez 2009)

jop das funzt

nur möchte ich ja die 3 erzeugten konten vergleichen. so wie die methode jetzt ist, vergleicht sie konto1 und 2..

wie veränder ich die methode,damit er allgemin alle vorhandenen konto objekte vergleicht?


----------



## sh33p (27. Dez 2009)

edit: habs^^


----------

