Wie verschiebe ich die Positionen aller Elemente im Array um 1 und schmeiße die erste Position raus?
Wie entnehme ich den Wert der ersten Position meines Arrays und rücke für alle andere Werte eine Position auf?
Mein Problem ist, dass dieser nicht nachrückt und die Werte beim wiederholten Aufrufen (Zeile 18-20 (der "Aufrufer") für Zeile 23-30) gleich bleiben. Die Konsole gibt für alle Geschenke das selbe Gewicht an (hier: 1kg).
Code (übersichtlich): https://pastebin.com/FDqkmH9h
private Rentier[] rentiere;
private Geschenk[] geschenke;
Schlitten(Geschenk[] geschenke, Rentier[] rentiere) {
this.geschenke = new Geschenk[geschenke.length];
for (int i = 0; i < geschenke.length; i++) {
this.geschenke[i] = new Geschenk();
}
this.rentiere = new Rentier[rentiere.length];
for (int i = 0; i < rentiere.length; i++) {
this.rentiere[i] = new Rentier();
}
System.out.println("Die Tour beginnt:");
for (int i = 0; i < geschenke.length; i++) {
System.out.println("Der Weihnachtsmann liefert aus: " + getNaechstesGeschenk().getString());
}
}
public Geschenk getNaechstesGeschenk() {
Geschenk[] ausgabe = new Geschenk[1];
ausgabe[0] = geschenke[0];
for (int i = 0; i < geschenke.length - 1; i++) {
geschenke[i] = geschenke[i + 1];
}
return ausgabe[0];
}
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();
}
PS.: Bitte keine Mehrfachfragen. Ich sehe gerade, dass du bereits vor 4h eine Komplettlösung zu diesem Problem bekommen hast: https://www.gutefrage.net/frage/wie-erstelle-ich-diese-methode-in-java
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