# Arraylist nachbauen, Personen-Liste erstellen



## arti28 (2. Dez 2015)

Hi Leute,
vielleicht stehe ich auf dem schlauch und hab eine Denkblockade aber leider komme ich momentan nicht weiter.
Ziel der Übung ist es eine Liste für alle Personen in einem Krankenhaus zu führen.
Dabei ist unter anderem die Super-Klasse "Personen" entstanden


```
public class Person {
    //geschlecht true - weiblich, false - männlich
    public boolean geschlecht = true;
    String vorname = "";
    String nachname = "";
  
    public Person(String vorname, String nachname, boolean geschlecht) {
        this.vorname = vorname;
        this.nachname = nachname;
        this.geschlecht = geschlecht;
    }
  
    public String anrede (){
        String str ="";
        if (geschlecht == true){
            return str + "Frau " + vorname +" "+ nachname;
        }else {
            return str + "Herr " + vorname +" "+ nachname;
        }
    }

}
```

die Subklasse "Mitarbeiter" so wie dessen Subklassen und eine Tester-Klasse erspare ich euch 

und die Personen-Liste


```
public class Personenliste {
    private Arzt arzt;
    //maximale Anzahl in der Liste. Hinzufügen neuer Personen soll verweigert werden.
    private int anzahl = 1000;
    private Person  [] personen = new Person [anzahl];
    private boolean [] anwesend = new boolean [anzahl];

    public Personenliste() {
    }
  
    public void hinzufuegen (Person p){  
      
    }
  
    public void entfernen (Person p){
      
    }
  
    public void kommt (Person p){
      
    }
  
    public void geht (Person p){
      
    }
  
    public Arzt findeArzt (String vorname, String nachname){
        return arzt;
    }

}
```

Nun zu meinem Problem:

Wie ihr seht, habe ich für folgende Methoden noch keine Ansätze. Wenn ihr mir bei der Hinzufügen-Methode helfen könnt, komm ich vielleicht von selbst auf den Rest. Sie soll eine weitere Person zur Liste hinzufügen und deren Anwesenheit auf false setzen. ist die Personenliste voll (int anzahl), soll die Methode keine weitere Person hinzufügen

Danke im Vorraus


----------



## Khal Drogo (2. Dez 2015)

Wenn du eine Liste erstellen sollst, wieso benutzt du dann keine Listen?

Mit freundlichen Grüßen
Xelsarion


----------



## arti28 (2. Dez 2015)

Xelsarion hat gesagt.:


> Wenn du eine Liste erstellen sollst, wieso benutzt du dann keine Listen?


ist leider Teil der Aufgabe :/


----------



## Khal Drogo (2. Dez 2015)

In dem Fall kannst du dir entweder merken, welche Array-Einträge schon belegt sind oder du benutzt einfach einen Zähler, der immer auf die nächste freie Stelle verweist. Das wären spontan meine Vorschläge.

Mit freundlichen Grüßen
Xelsarion


----------



## arti28 (2. Dez 2015)

also in etwa so? :


```
public void hinzufuegen (Person p){
   for (for int i = 0; i<= personen.length();i+++){
      person ++;
      for (int i = 0; i<= anwesend.length(); i++){
         anwesenheit = false;
      }
   }
```

ist jetzt mal ein ganz wagemutiger Vorschlag, fürchte ich


----------



## Khal Drogo (2. Dez 2015)

Welchen Zweck soll dein Vorschlag denn erfüllen?
Ich würde mir vielleicht eher eine statische Variable dazunehmen.. _static int anzahlPersonenInListe_ die du dann beim hinzufügen einer Person erhöhst bzw. beim löschen auch verringern musst, wobei das Löschen vermutlich komplizierter ist, da du eventuell auftretende Löcher stopfen solltest.

Mit freundlichen Grüßen
Xelsarion


----------



## arti28 (2. Dez 2015)

kann mir denn bitte irgendjemand helfen 

klar schreib ich irgendnen mist daher...ist ja auch das Anfänger-forum...Leute ich hab doch nicht so viel ahnung davon und wäre dankbar für hilfe mit erkläreung


----------



## Tobse (2. Dez 2015)

Nur damit ich das richtig verstehe: ihr sollte die funktionalität von ArrayList nachprogrammieren?!

Ich vermute eher, die Aufgabenstellung meint Delegation:


```
public class Personenliste {
    private Collection<Person> liste = new HashSet<>();
    private Collection<Person> anwesendePersonen = new HashSet<>();
   
    publicvoid hinzufuegen (Person p){
         liste.add(p);
   }

   publicvoid entfernen (Person p){
       liste.remove(p);
   }

   publicvoid kommt (Person p){
       anwesendePersonen.add(p);
   }

   publicvoid geht (Person p){
      anwesendePersonen.remove(p);
   }

   public Arzt findeArzt (String vorname, String nachname){
       // arzt aus anwesendePersonen filtern
       return arzt;
   }
}
```


----------



## arti28 (3. Dez 2015)

okay, durch rumprobieren und ein wenig hilfe vom Mitbewohner bin ich auf diese Lösung für die Methode "hinzufuegen" gekommen.


```
private int anzahl = 1000;
private Person[] personen = new Person[anzahl];
private boolean[] anwesend = new boolean[anzahl];

public void hinzufuegen(Person p) {
        if (personen[anzahl-1] != null) {
            System.out.println("Ihre Liste ist voll");
        } else {

            for (int i = 0; i < personen.length; i++) {
                if (personen[i] == null) {
                    personen[i] = p;
                    anwesend [i] = false;
                    System.out.println("Person " + p.vorname + " " + p.nachname + " wurde hinzugefügt.");
                    break;
                }
            }
        }
    }
```

Jetzt möchte ich die Einträge, die ich damit erstellen kann, auch wieder löschen können. Dabei sollen sich nachfolgende Personen in der Reihenfolge um eins nach links verschieben


----------



## Flown (3. Dez 2015)

Könntest du einfach mal die Aufgabenstellung posten?


----------



## arti28 (3. Dez 2015)

Flown hat gesagt.:


> Könntest du einfach mal die Aufgabenstellung posten?


Hier einmal der genaue Wortlaut der Aufgabe

in dieser Aufgabe soll eine Personenliste für alle Personen im Krankenhaus realisiert werden. Personen sollen hinzugefügt und entfernt werden können, und es soll angegeben werden können, welche Personen anwesend sind und welche nicht

A) Schreibe eine Klasse mit dem Namen "Personenliste" mit den folgenden Objektattributen:
anzah, int.
personen, Person [].
anwesend, boolean []

Erläuterungen:

B) Schreibe für die Klasse "Personenliste" einen Konstruktor, der eine leere Personenliste erzeugt. Der Konstruktor soll keinen Parameter haben.

C) Schreiben Sie für die Klasse "Personenliste" eine Methode mi dem Namen "hinzufuegen". Die Methode habe einen Parameter vom Typ "Person" und keinen Rückgabewert. Die Methode soll eine weitere Person zur Personenliste hinzufügen und deren Anwesenheit auf false setzen. Ist die Liste bereits voll, so soll die Methode keine weitere Person mehr hinzufügen.

D) Schreiben Sie für die Klasse "Personenliste" eine Methode mit dem Namen "entfernen". Die Methode soll einen Parameter von Typ "Person" und keinen Rückgabewert. Die Methode soll eine Person aus der Liste entfernen. Ist die Person nicht in der Personenliste enhtalten, so ändert die Methode die Personenliste nicht. Hinweis. verschieben Sie beim entfernen alle nachfolgenden Personen im Array "personen" um eins nach links. Analog für "anwesend".

E) Schreiben Sie für die Klasse "Personenliste" eine Methode mit dem Namen "kommt". Die Methode habe einen Parameter von Typ "Person" und keinen Rückgabewert. Die Methode soll die Anwesenheit der Person auf true setzen.

F) Schreiben Sie für die Klasse "Personenliste" eine Methode mit dem Namen "geht". Die Methode habe einen Parameter von Typ "Person" und keinen Rückgabewert. Die Methode soll die Anwesenheit der Person auf false setzen.

G) Schreiben Sie für die Klasse "Personenliste" eine Methode mit dem Namen "findeArzt". Die Methode habe die Parameter "vorname" und "nachname", beide vom Typ String, und einen Rückgabewert vom Typ Arzt. Die Methode soll in der Liste nach einem Arzt (Subklasse, erstellt aus Person -> Mitarbeiter -> Arzt) mit dem angegebenen Namen suchen und diesen zurückgeben.


----------



## Flown (3. Dez 2015)

Das Problem ist hier, wir lösen keine Aufgaben für dich, außer du schreibst einen kleinen Job aus. Aber bei konkreten Fragen können wir dir gerne helfen!


----------



## arti28 (3. Dez 2015)

okay. dann binde ich mal eigene Vorschläge ein und hoffe auf Verbesserungen.
Wie finde ich heraus ob ich den richtigen Mitarbeiter "lösche"? 
Ich hätte die Idee, dass ich die Strings für Vorname und Nachname mithilfe von equalsIgnoreCase des Mitarbeiters innerhalb einer For-Schleife mit allen existierenden Einträgen vergleiche. 
In etwa So:


```
public void entfernen(Person p) {
        for (int i = 0; i < personen.length; i++) {
            // vergleicht die Namen und Vornamen
            // wenn diese gleich sind, dann...
            if (p.vorname.equalsIgnoreCase(personen[i].vorname)
                    && p.nachname.equalsIgnoreCase(personen[i].nachname)) {
                    //...wird der eintrag wieder auf "null" verwiesen
                    //Analog für "anwesend"
                    personen[i] = null;
                    anwesend[i]= null;
            //wenn der Name nicht gefunden wird (auf null verweist) wird abgebrochen
            } else if (personen[i]==null){
                   break;
            }
        }
    }
```

doch wie verschiebe ich dann alle anderen nach links?? passiert das automatisch oder muss dafür nochmal eine For-Schleife erstellt werden?


----------



## Joose (3. Dez 2015)

Ich würde es eben auf 2 Schleifen aufteilen.
Die 1.Schleife löscht die Person (Achtung du hast ein boolean[], boolean kann nur true/false annehmen aber nicht null. Dafür bräuchtest du ein "Boolaen[]". Unterschied primitiver Datentyp/Klasse)
Die 2.Schleife verschiebt die restlichen Personen nach vorne(links).

Die 1.Schleife hast du schonmal, von dieser Schleife merkst du dir die Zählervariable "i".
Ab diesem Index müssen in der 2.Schleife alle nach vorne verschoben werden. Solange bis die Liste durchgearbeitet wurde oder keine Person mehr vorhanden ist.
Tipp: array[index] = array[index+1]


----------



## Tobse (3. Dez 2015)

Was ist denn an meinem Vorschlag falsch? Laut Aufgabenstellung erfüllt es genau den zweck, wenn du dich auf eine ArrayList verlässt.


----------



## Joose (3. Dez 2015)

@Tobse weiter oben wurde geschrieben das es Teil der Aufgabe ist keine ArrayList (bzw. vorimplementierte Listen) zu verwenden.

Die Aufgabe soll eine eigene Implementierung eine Liste als Ziel haben


----------



## Tobse (3. Dez 2015)

Joose hat gesagt.:


> @Tobse weiter oben wurde geschrieben das es Teil der Aufgabe ist keine ArrayList (bzw. vorimplementierte Listen) zu verwenden.
> 
> Die Aufgabe soll eine eigene Implementierung eine Liste als Ziel haben


In der Aufgabenstellung ist das nicht enthalten. Und auf meine Nachfrage, ob das wirklich so sei, wurde nicht reagiert.

Mir geht es nicht darum, dass meine Lösung super toll ist. Mir geht es darum, zu vermitteln, dass man fast immer besser bedient ist, wenn man sich auf eine gut getestete, bestehende Lösung verlässt anstatt eigenes Zeug zusammen zu schustern.


----------



## arti28 (3. Dez 2015)

In der Aufgabenstellung ist das Wirklich nicht enthalten. Es wurde uns nahegelegt es ohne die Arraylist zu schreiben. Das Ziel ist wirklich, so wie @Joose erkannt hat, eine eigene Implementierung davon umzusetzen.
Sonst wäre das ja "Viel zu einfach" um einen richtig zu fordern


----------



## arti28 (3. Dez 2015)

Joose hat gesagt.:


> ...(Achtung du hast ein boolean[], boolean kann nur true/false annehmen aber nicht null. Dafür bräuchtest du ein "Boolaen[]". Unterschied primitiver Datentyp/Klasse)...



Google sei Dank habe ich so ungefähr ne Vorstellung davon was der Unterschied zwischen den Beiden ist. Kann ich denn in die Boolean [] true, false und null einsetzen oder verstehe ich das falsch?



Joose hat gesagt.:


> ...Tipp: array[index] = array[index+1]


ich bin mir nicht sicher verstanden zu haben was du meinst, habe es trotzdem mal versucht.

Hier mal meine Variante

```
public void entfernen(Person p) {
        for (int i = 0; i < personen.length; i++) {
            //Vergleicht die Namen und Vornamen
            //wenn diese gleich sind, dann...
            if (p.vorname.equalsIgnoreCase(personen[i].vorname)
                    && p.nachname.equalsIgnoreCase(personen[i].nachname)) {
                //...wird der Eintrag auf null verwiesen und somit gelöscht
                personen[i]=null;
                //Ab diesem Punkt werden alle eins nach links geschoben
                for (int j = i; j < personen.length; j++) {
                    personen[j]=personen[j+1];
                    //wenn der letzte eintrag auf null verweist, wird abgebrochen
                    if (personen[j+1]==null){
                        break;
                    }
                }
            } else if (personen [i] == null){
                break;
            }
        }
    }
```

Dennoch bleiben noch die Anwesenheiten offen...irgendwelche Vorschläge?

Kleiner Nachtrag: hab den Code mal ausgeführt und feststellen müssen, dass ich eine NullPointerException in meiner ersten If-Abfrage habe


----------



## Joose (4. Dez 2015)

arti28 hat gesagt.:


> Kann ich denn in die Boolean [] true, false und null einsetzen oder verstehe ich das falsch?



Genau da könntest du dann eben true, false oder null angeben.


arti28 hat gesagt.:


> ich bin mir nicht sicher verstanden zu haben was du meinst, habe es trotzdem mal versucht.



Das war nur Beispielcode um etwas von einem Index auf den vorherigen Index zu kopieren. 



arti28 hat gesagt.:


> Hier mal meine Variante
> ......
> Dennoch bleiben noch die Anwesenheiten offen...irgendwelche Vorschläge?



Deine beiden Arrays "personen" und "anwesend" sind beide gleich lang. Der Wert von Index x in dem einem gehört zum Wert von Index x im anderen.
Sprich wenn du den Wert von "personen_" auf null setzt, musst du es im anderen ebenfalls auf null setzen.
Wenn du im personen Array die Objekte verschiebst musst du sie im anderen Array ebenfalls verschieben.



		Java:In die Zwischenablage kopieren


personen[j] = personen[j + 1];

Mit diesem Code kopierst du dein Personen Objekt von einem Index auf der vorherigen.
Danach hast du diese Objekt auf Index j und j+1, da das nicht gewollt ist musst du es auf Index j+1 auch löschen
-> personen[j+1] = null; // analog dazu auch im anwesend Array




arti28 hat gesagt.:



			Kleiner Nachtrag: hab den Code mal ausgeführt und feststellen müssen, dass ich eine NullPointerException in meiner ersten If-Abfrage habe
		
Zum Vergrößern anklicken....


Natürlich wenn du deine Liste durchgehst prüfst du zuerst auf den Namen und erst dann wird überhaupt überprüft ob auf Index "i" überhaupt ein Objekt liegt!
Hier musst du die Prürfungen umdrehen -> immer erst auf == null prüfen



		Java:In die Zwischenablage kopieren


public void entfernen(Person p) {
  for (int i = 0; i < personen.length; i++) {
  //Vergleicht die Namen und Vornamen
  //wenn diese gleich sind, dann...
  if (p.vorname.equalsIgnoreCase(personen[i].vorname) && p.nachname.equalsIgnoreCase(personen[i].nachname)) {
         .........
  } else if (personen [i] == null){
  break;
  }
  }
  }

_


----------



## Flown (4. Dez 2015)

Wie lautet die Aufgabenstellung für die Klassen Personen, Mitarbeiter, Arzt, etc? Poste doch mal was hier gefordert ist!


----------



## arti28 (5. Dez 2015)

Flown hat gesagt.:


> Wie lautet die Aufgabenstellung für die Klassen Personen, Mitarbeiter, Arzt, etc?



Neben der Aufgabenstellung füge ich noch die Klassen ein, die ich geschrieben habe.


Spoiler: AUFGABENSTELLUNG PERSONEN A bis G



In Dieser Aufgabe sollen Klassen geschieben werden, deren Objekte die Daten von Kunden und Mitarbeitern in einem Krankenhaus darstellen. Implementieren Sie die Klassen wie unten beschieben und testen Sie die Funktionalität der Klassen.

A) Schreiben Sie eine Klasse mit dem Namen "Person" und den folgenden nicht-statischen Attributen:
nachname -> String
vorname -> String
geschlecht -> boolean
bei dem Attribut "geschlecht" stehe der Wert true für weiblich und false für männlich.

B) Schreiben sie zure Klasse "Person"die Objektmethode "anrede" hinzu. die Methode habe keinen Parameter und einen Rückgabewert vom Typ String. Der String soll bei Frauen den Wert "Frau Vorname Nachname" und bei Männdern den Wert "Herr Vorname Nachname" haben

C) Deklarieren sie eine Klasse mit dem Namen "Mitarbeiter". Die Klasse ist Sohn der Klasse "Person". Zusätzlich habe die Klasse "Mitarbeiter" die folgenden Objektattribute:
personalnummer -> int
gehalt -> int

D) Deklarieren Sie eine Klasse mit dem Namen "Arzt". Diese Klasse ist Sohn der Klasse "Mitarbeiter". Zusätzlich habe die Klasse Artzt die folgenden Objektattribute
buerozimmernummer -> int
rang -> int

Das Attribut "rang" habe die Werte 0,1,2 und 3.
0 stehe für AIP (Arzt im Praktikum) 1 für Facharzt, 2 für Oberarzt und 3 für Chefarzt.

E) Überschreiben Sie in der Klasse "Arzt" die Methode "anrede", sodass für die einzelnen Ärzte, je nach Rang und je nach Geschlecht die folgenden Anreden verwendet werden
"Vorname Nachname (AIP)"
"Fachärztin Vorname Nachname"
f.f. die o.g Ränge für männlich und weiblich.

F) Deklarieren Sie eine Klasse mit dem Namen "Krankenpfleger". Die Klasse "Krankenpfleger" ist Sohn der Klasse Mitarbeiter und habe keine zusätzlichen Objektattribute.

G) überschreiben Sie in der Klasse "Krankenpfleger" die Methode "anrede", sodass für die einzelnen Krankenpfleger, je nach Geschlecht, folgenden Anreden verwendet werden
"Krankenschwester Vorname Nachname"
"Krankenpfleger Vorname Nachname"





Spoiler: AUFGABENSTELLUNG PERSONEN H BIS M



H) FÜgen Sie zur Klasse "Krankenpfleger" die Methode "formloseAnrede" hinzu. Diese Methode habe keinen Parameter und einen Rückgabewert vom Typ String. In diesem Rückgabewertsoll so sein wie bei "anrede" in der Klasse "Person". Verwenden Sie deshalb in "formloseAnrede" die Methode "anrede" der klasse "Person".

I) Deklarieren Sie eine Klasse mit dem Namen "Kunde" Die Klasse "Kunde" ist Sohnd der Klasse "Person". Zusätzlich habe die Klasse "Kunde" das folgende Objektattribut:
behandelnderArzt -> Arzt

J)Deklarieren Sie eine Klasse mit dem Namen "GesetzlichVersicherter". Diese Klasse ist Sohn der Klasse "Kunde" und habe zusätzlich das folgende Objektattribut.
krankenkasse -> String

K)Deklarieren Sie eine Klasse mit dem Namen "PrivatVersicherter". Diese Klasse ist Sohn der Klasse "Kunde" und habe zusätzlich die folgenden Objektattribute.
iban -> String
bic -> String

L) Schreiben Sie zu "Mitarbeiter" eine Methode mit dem Namen "verdientMehrAls". Diese Methode habe genau einen Parameter vom Typ "Mitarbeiter" und einen Rückgabewert vom Typ boolean, der angibt, ob der mitarbeiter mehr verdient als der im Parameter angegebene.
Testen Sie diese Methode, in dem Sie dieser Methode nacheinander vom Typ Arzt und Krankenpfleger übergeben.

M) Schreiben Sie zu "Kunde" eine Methode mit dem Namen "arztVerdientMehrAls", die die Gehälter der behandelnden Ärzte zweier Kunden vergleicht. Die Methode habe genau einen Parameter vom Typ "Kunde" und einen Rückgabewert vom Typ boolean, der angibt, ob der Kunde einen behandelnden Arzt hat, der mehr verdient als der Arzt im Parameter angegebenen Kunden. Verwenden Sie die Mehode "verdientMehrAls" der Klasse Mitarbeiter"




Hier nun Meine Klassen:

Person:


Spoiler





```
public class Person {
    //geschlecht true - weiblich, false - männlich
    public boolean geschlecht = true;
    String vorname = "";
    String nachname = "";
 
    public Person(String vorname, String nachname, boolean geschlecht) {
        this.vorname = vorname;
        this.nachname = nachname;
        this.geschlecht = geschlecht;
    }
 
    public String anrede (){
        String str ="";
        if (geschlecht == true){
            return str + "Frau " + vorname +" "+ nachname;
        }else {
            return str + "Herr " + vorname +" "+ nachname;
        }
    }

}
```




Mitarbeiter


Spoiler





```
public class Mitarbeiter extends Person {
    int personalnummer;
    int gehalt;

    public Mitarbeiter(String vorname, String nachname, boolean geschlecht, int personalnummer, int gehalt) {
        super(vorname, nachname, geschlecht);
        this.personalnummer = personalnummer;
        this.gehalt = gehalt;
    }
 
    public boolean verdientMehrAls (Mitarbeiter mitarbeiter){
        if(mitarbeiter.gehalt < this.gehalt){
            System.out.println("Verdient mehr");
            return true;
        }else{
            System.out.println("Verdient nicht mehr");
            return false;
        }
    }

}
```




Arzt


Spoiler



public class Arzt extends Mitarbeiter {
   int buerozimmernummer;
   int rang;

   public Arzt(String vorname, String nachname, boolean geschlecht, int personalnummer, int gehalt, int buerozimmernummer, int rang) {
     super(vorname, nachname, geschlecht, personalnummer, gehalt);
     this.buerozimmernummer = buerozimmernummer;
     this.rang = rang;
   }

   public String anrede (){
     String str = "";
     switch (rang){
     case 0: str = ""+vorname+" "+nachname+" (AIP) ";
         break;
     case 1: if (geschlecht == true){
         str = "Fachärztin " + vorname + " " + nachname;
         }else{
         str = "Facharzt " + vorname + " " + nachname;
         }
         break;
     case 2: if (geschlecht == true){
         str = "Oberärztin " + vorname + " " + nachname;
         }else{
           str = "Oberarzt " + vorname + " " + nachname;
         }
         break;
     case 3: if (geschlecht == true){
         str = "Chefärztin " + vorname + " " + nachname;
         }else{
         str = "Chefarzt " + vorname + " " + nachname;
         }
         break;
     default: str = "UNGÜLTIGER RANG";
     }
     return str;
   } // End public String anrede

} //End Class Arzt



Krankenpfleger


Spoiler





```
public class Krankenpfleger extends Mitarbeiter {

    public Krankenpfleger(String vorname, String nachname, boolean geschlecht, int personalnummer, int gehalt) {
        super(vorname, nachname, geschlecht, personalnummer, gehalt);
    }
 
    public String anrede (){
        String str ="";
        if (geschlecht == true){
            str = ""+"Krankenschwester " + vorname + " " + nachname;
        }else{
            str = ""+"Krankenpfleger " + vorname + " " + nachname;
        }
        return str;
    }
 
    public String formloseAnrede (){
        return super.anrede();
    }

}
```




Kunde


Spoiler





```
public class Kunde extends Person{
 
    Arzt behandelnderArzt;

    public Kunde(String vorname, String nachname, boolean geschlecht, Arzt behandelnderArzt) {
        super(vorname, nachname, geschlecht);
        this.behandelnderArzt = behandelnderArzt;
    }
 
    public boolean arztVerdientMehrAls (Kunde kunde){
        if (behandelnderArzt.gehalt < kunde.behandelnderArzt.gehalt){
            System.out.println("Verdient mehr");
            return true;
        }else{
            System.out.println("verdient nicht mehr");
            return false;
        }
    }

}
```




den Gesetzlich versicherten und den privatversicherten lasse ich mal raus...[/SPOILER]


----------



## arti28 (5. Dez 2015)

Joose hat gesagt.:


> Hier musst du die Prürfungen umdrehen -> immer erst auf == null prüfen




ES FUNKTIONIERT! Genial
Bin das auch noch mit dem Debugger durchgegangen. Alle restlichen Einträge wurden sogar wirklich nach hinten verschoben 

Hier jetzt die Version 2.0 der Methode Entfernen


```
public void entfernen(Person p) {
        for (int i = 0; i < personen.length; i++) {
            // Prüft Ob das Feld Besetzt ist...
            // Ist das Array nicht besetzt, wird abgebrochen
            if (personen[i] == null) {
                break;
                // Anderenfalls werden die Namen verglichen.
                // Bei Übereinstimmung...
            } else if (p.vorname.equalsIgnoreCase(personen[i].vorname)
                    && p.nachname.equalsIgnoreCase(personen[i].nachname)) {

                // ...wird der Eintrag auf null verwiesen und somit gelöscht
                personen[i] = null;
                System.out.println("Die Person " + p.vorname + " " + p.nachname + " wurde entfernt");
                // Ab diesem Punkt werden alle weiteren Einträge eins nach links geschoben
                for (int j = i; j < personen.length; j++) {
                    personen[j] = personen[j + 1];
                    anwesend[j] = anwesend [j+1];
                    // wenn der letzte eintrag auf null verweist, ist
                    if (personen[j + 1] == null) {
                        break;
                    }
                }
            }

        }
    }
```


----------

