33_ArrayObject_Insert

Code-Dateien

DateinameAktion
CODECode_Fenster_D.zipDownload
CODECode_Student_D.zipDownload
CODECode_Worker_E.zipDownload

PDF-Dokumente

DateinameAktion
PDFFolie_Student_D.pdfÖffnen

Videos

DateinameAktion
VIDEOVideo_Fenster_DAbspielen
VIDEOVideo_Student_DAbspielen
VIDEOVideo_Worker_EAbspielen

Lernmaterialien

Einfügen

    public void einfugen(Student wer, int pos) {
        if (wer != null) {
            if (wer.getSchool() == null) {
                if ((pos >= 0) && (pos <= anzahl)) {
                    if (anzahl < students.length) {
                        for (int i = anzahl - 1; i >= pos; i--) {
                            students[i+1] = students[i];
                        }
                        students[pos] = wer;
                        wer.setSchool(this);
                        anzahl++;
                    }
                    else {
                        System.out.println("Fehler: kein Platz!");
                    }
                }
                else {
                    System.out.println("Fehler: ungültige Position!");
                }
            }
            else {
                System.out.println("Fehler: schon angemeldet!");
            }
        }
        else {
            System.out.println("Fehler: kein Student!");
        }
    }

Was die Methode macht

Sie setzt einen Studenten wer an die Stelle pos im Array students.

Damit dort Platz ist, werden alle bisherigen Elemente ab pos um eins nach rechts verschoben.

Bedeutung der Parameter

Student wer

  • Der Student, der eingefügt werden soll.

int pos

  • Die Position, an der eingefügt werden soll.

Beispiel:

  • pos = 0 → vorne einfügen

  • pos = anzahl → hinten anhängen

  • pos = 2 → an Index 2 einfügen

if (wer != null)

Prüft, ob überhaupt ein Student übergeben wurde.

  • wer != null → es gibt ein Student-Objekt

  • sonst Fehlermeldung:

System.out.println(“Fehler: kein Student!”);

if (wer.getSchool() == null)

Prüft, ob der Student noch bei keiner Schule angemeldet ist.

Die Idee:

  • Hat der Student schon eine Schule, soll er nicht noch einmal eingefügt werden.

  • null bedeutet hier: noch keiner Schule zugeordnet.

Wenn er schon eine Schule hat:

System.out.println(“Fehler: schon angemeldet!”);

if ((pos >= 0) && (pos <= anzahl))

Prüft, ob die Position gültig ist.

Gültige Positionen sind:

  • mindestens 0

  • höchstens anzahl

Warum pos <= anzahl?

  • Weil man auch hinten anhängen darf.

  • Beispiel: Wenn anzahl = 5, sind die belegten Plätze 0 bis 4.

  • Einfügen bei 5 bedeutet: ans Ende setzen.

Ist die Position ungültig:

System.out.println(“Fehler: ungültige Position!”);

if (anzahl < students.length)

Prüft, ob im Array überhaupt noch Platz ist.

  • anzahl = wie viele Studenten aktuell gespeichert sind

  • students.length = maximale Größe des Arrays

Wenn anzahl schon gleich students.length ist, ist das Array voll.

Dann:

System.out.println(“Fehler: kein Platz!”);

Der wichtigste Teil: Verschieben

for (int i = anzahl - 1; i >= pos; i–) {
students[i+1] = students[i];
}

Hier werden die vorhandenen Studenten von rechts nach links verschoben.

Warum von rechts nach links? Damit keine Werte überschrieben werden.

    public Student getStudent(int pos) {
        if ((pos >= 0) && (pos < anzahl)) {
            return students[pos];
        }
        else {
            return null;
        }
    }

Kurz erklärt:

  • Es wird geprüft, ob pos eine gültige Position ist.

  • Gültig ist:

    • pos >= 0

    • pos < anzahl

Wenn die Position gültig ist:

return students[pos];

→ Der Student an dieser Stelle wird zurückgegeben.

Wenn die Position ungültig ist:

return null;

→ Es wird kein Student zurückgegeben.

    @Test
    public void testEinfugen() {
        School htl = new School("HTL");
        Student max = new Student("Max", 21, true);
        Student susi = new Student("Susi", 19, true);
        Student alex = new Student("Alex", 20, true);
        Student hans = new Student("Hans", 20, true);
        Student felix = new Student("Felix", 20, true);
        Student andrea = new Student("Andrea", 20, true);
        Student marianne = new Student("Marianne", 20, true);
        System.out.println("==================");
        System.out.println(htl);
        htl.aufnehmen(max);
        htl.aufnehmen(susi);
        htl.aufnehmen(alex);
        htl.aufnehmen(hans);
        htl.aufnehmen(felix);
        htl.einfugen(andrea, 1);
        htl.einfugen(marianne, 0);
        assertEquals(marianne, htl.getStudent(0));
        assertEquals(max, htl.getStudent(1));
        assertEquals(andrea, htl.getStudent(2));
        assertEquals(susi, htl.getStudent(3));
        assertEquals(alex, htl.getStudent(4));
        assertEquals(hans, htl.getStudent(5));
        assertEquals(felix, htl.getStudent(6));
    }