Wie verschiebe ich die Positionen aller Elemente im Array um 1 und schmeiße die erste Position raus?

2 Antworten

1) Das Anlegen eines Arrays ist an dieser Stelle

Geschenk[] ausgabe = new Geschenk[1];

doch unnötig. Ein einzelnes Objekt reicht aus.

Geschenk ausgabe = geschenke[0];
// verschiebe Array ...
return ausgabe;

2) Das Aufrücken ist nur zur Hälfte richtig. Angenommen, du würdest so ein int-Array [ 2, 4, 6, 8 ] verrücken. Das Ergebnis wäre [ 4, 6, 8, 8 ], da die letzte Stelle nicht streichst. Du benötigst ein neues Array mit einer neuen Länge (alte Arraylänge - 1).

Geschenk[] temp = new Geschenk[geschenke.length - 1];

for (int i = 0; i < temp.length; ++i) {
  temp[i] = geschenke[i + 1];
}

geschenke = temp;

Da das Array irgendwann dann einmal leer sein könnte, solltest du diesbezüglich auch noch eine Abfrage einbauen. Dann könnte die Methode stattdessen null zurückgeben.

Aus der Schleife in Zeile 14 könnte eine while-Schleife werden:

Geschenk geschenk = getNaechstesGeschenk();

while (geschenk != null) {
  System.out.printf("Der Weihnachtsmann liefert aus: %s%n", geschenk.getString());
  geschenk = getNaechstesGeschenk();
}

Hab es nicht getestet, aber sieh dir mal die 1. FOR in Schlitten an.
this.geschenke[i] = new Geschenk(); //new Geschenk[geschenke.length];
this.geschenke[i] =
geschenke[i]; // Parameterwertzuweisung