# Soziales Netzwerk mit Arrays rekursiv



## kilopack15 (20. Nov 2016)

Hallo Leute,
habe hier eine etwas umfangreichere Aufgabe und kleinere Fragen. Ich hoffe ihr könnt mir helfen 

Aufgabe:
In einem sozialen Netzwerk dreht sich alles um die Interaktion mit Freunden und den
Freunden der Freunde. Diese Bekanntschaften über Eck kann man beliebig weit ana-
lysieren. Laut dem Kleine-Welt-Phänomen, kennt ein Mensch jeden anderen Menschen
im Durchschnitt über ca. 6 Ecken. Gegeben ist die Klasse Person. Entwickeln Sie eine Klasse SozialesNetzwerk, welche die Methode
public Person[] getFreundeskette(Person start, Person ende)
enthält. Die Methode analysiert die Bekanntschaften des sozialen Netzwerks hinsicht-
lich der Bekanntschaften, durch welche Person start mit der Person ende verbunden ist.
Dabei wird davon ausgegangen, dass die Person ende nicht weiter als 6 Ecken von der
Person start entfernt ist. Der Rückgabewert der Methode ist daher ein Personen-Array
mit length = 6, welches die Personen in der identifizierten Freundschaftskette beinhaltet.
Dabei enhält der Index 0 den Ausgangspunkt und damit einen direkten Freund der Per-
son start. Die letzte Person im Array ist die Person ende selbst. Dies muss aber nicht
zwangsläufig der Index 5 sein, sondern ist abhängig von der Länge der Freundschaftsket-
te. Überschüssige Plätze im Array sollen den Wert null enthalten. Die Aufgabe ist von
Ihnen durch Rekursion zu lösen! Als Beispiel sollen die Personen des folgenden Netz-
werks dienen. Pfeile zwischen Personen symbolisieren eine einseitige oder beiderseitige
Freundschaft.

Klasse Person:

```
public class Person {

    /** Liste aller Freunde*/
    private Person[] freundesliste;
    /** Name der Person*/
    private String name;

    /**
     * Konstruktor
     * @param name Name der Person.
     * @param freundesliste Freundesliste der Person.
     */
    public Person(String name, Person[] freundesliste) {
        this.freundesliste = freundesliste;
        this.name = name;
    }

    /**
     * Gibt die Freundesliste einer Person zurueck.
     * @return Freundesliste als Array.
     */
    public Person[] getFreunde() {
        return freundesliste;
    }

    /**
     * Ermoeglicht das nachtraegliche veraendern der Freundesliste.
     * @param freundesliste neue Freundesliste.
     */
    public void setFreunde(Person[] freundesliste) {
        this.freundesliste = freundesliste;
    }

    /**
     * Gibt den Namen der Person zurueck.
     * @return Name der Person.
     */
    public String getName() {
        return name;
    }

    /**
     * Stellt fest, ob eine andere Person ein Freund dieser Person ist.
     * @param person Person nach der in der Freundesliste gesucht wird.
     * @return true wenn die Person ein Freund ist; andernfalls fasle.
     */
    public boolean isFriendWith(Person person) {
        for (Person p : freundesliste) {
            if (p != null && person != null && p.getName().equals(person.getName())) {
                return true;
            }
        }
        return false;
    }

    /**
     * Gibt an, ob zwei Personen gleich sind.
     * @param person Person mit der verglichen wird.
     * @return true, wenn die Namen der beiden Personen identisch sind; andernfalls false.
     */
    public boolean equals(Person person){
        return name.equals(person.getName());
    }

    /**
     * Gibt die Person als String zurueck.
     * @return Name der Person.
     */
    public String toString(){
        return getName();
    }
}
```

Hier die Objekte im sozialen Netzwerk.

Ich hab mit dem Konstruktor der Klasse Person schonmal die ganzen Objekte initialisiert. Hier mein Ansatz:

```
public class SozialesNetzwerk {

    public Person[] getFreundeskette(Person start, Person ende){
        Person theresa = new Person("Theresa",new Person[0]);
        theresa.setFreunde(null);
        Person thomas = new Person("Thomas",new Person[1]);
        Person kerstin = new Person("Kerstin",new Person[3]);
        Person michael = new Person("Michael",new Person[1]);
        Person adam = new Person("Adam",new Person[1]);
    }
}
```
Dabei muss ich ja auch das Array "Freundesliste" der einzelnen Personen initialisieren. Ich habe bis jetzt aber nur die Anzahl der Freunde in den Arrays gesetzt. Wie stelle ich denn nun z.B. ein, das Thomas mit Theresa befreundet ist? Könnt ihr mir da weiterhelfen?


----------



## Flown (20. Nov 2016)

Ich seh schon, du lernst nicht gerne alleine oder in einer Arbeitsgruppe deiner Schule/Uni...

```
public static void test() {
  Person theresa = new Person("Theresa", new Person[0]);
  Person thomas = new Person("Thomas", new Person[] { theresa });
  Person kerstin = new Person("Kerstin", null);
  Person michael = new Person("Michael", new Person[] { kerstin });
  Person adam = new Person("Adam", new Person[] { michael });
  kerstin.setFreunde(new Person[] { adam, michael, thomas });
  Person[] freundeskette = getFreundeskette(adam, theresa);
  for (Person freund : freundeskette) {
    System.out.println(freund);
  }
}
```


----------



## kilopack15 (20. Nov 2016)

Danke Flown. Was meinst du damit?


----------



## Flown (20. Nov 2016)

kilopack15 hat gesagt.:


> Was meinst du damit?


Du stellst alle deine Hausaufgaben hier rein?


----------



## kilopack15 (20. Nov 2016)

Ich stelle einen Teil meiner Aufgaben hier rein. Meist ist es aber nur so, dass ich eine Frage zu einem kleinen Sachverhalt habe, welcher aber dann mit dem Kontext der Aufgabe zusammenhängt, weshalb ich dann die ganze Aufgabe einfach hereinstelle. genauso wie hier: Meine Frage könnte genauso gut lauten: Wie initialisiere ich ein Objekt-Array in einem Konstruktor? Meistens kommen bei so einer Aufgabe aber noch weitere Fragen von mir dazu, weshalb das so praktischer ist. 
Ich erwarte, dass niemand hier meine Aufgaben hier für mich löst und ich erwarte auch keine Antworten, die die komplette Lösung der Aufgabe beinhalten.


----------

