Array in ein anderes Array absteigend sortieren - Java?
Hallo Zusammen,
ich würde gerne ein Array in ein anderes Array absteigend sortieren.
Wenn ich in der for-Schleife und auch im weiteren Verlauf immer den letzen Index, also hier 3 manuell eingebe, läuft mein Programm tadellos. Jedoch möchte ich nicht von einer bestimmten Array-Länge abhängig sein und deshalb die Abbruchbedingung "hoch.length" anstatt eines festen Indexes nutzen, damit ich das Array auch ggf. erweitern kann.
Hier habe ich aber irgendwo einen Fehler und finde einfach nicht warum ich einen "Index out of bound" Fehler in der kursiv markierten Zeile erhalte.
Kann mir vielleicht jemand sagen wo mein Fehler liegt?
Danke!
public static void main(String[] args) {
// Index = 0,1,2,3
int [] hoch = new int []{2,3,4,5};
// neues array "runter" erstellen mit der Länge von Array "hoch"
int [] runter = new int [hoch.length];
// Start bei 0, Ende bei hoch.length
for(int i=0; i <= hoch.length; i++) {
// Hilfsvariable "hilfe" einbauen
int hilfe;
// hoch.length ist mein letzter Durchgang, -1 da ich eine Position mehr habe als dass ich einen Index habe
runter [i] = hoch [hoch.length -i -1];
hilfe = runter [i];
}
// Ausgabe
System.out.println("Array hoch:" + " " + Arrays.toString(hoch));
System.out.println("Array runter:" + " " + Arrays.toString(runter));
}}
3 Antworten
Lass dir einfach Mal den Wert von hoch.length ausgeben. Ich kann kein Java aber ich würde Mal glatt behaupten dass hoch.length == 4 ist (dein Array enthält ja 4 Felder) der letzte Index ist allerdings 3 (da der Array-index ja bei 0 anfängt zu zählen)
Deine Schleife arbeitet ja aktuell solange i <= hoch.length und da du i gleichzeitig als Indexpointer für das Array nutzt wird mit i==4 ein Feld angesprochen welches nicht existiert, daher der Fehler Index Out of bound.
Noch eine Anmerkung zur Lösung. Es währe viel eleganter wenn du zum Start der Schleife
i = hoch.length -1
setzt und dann statt einem inkrement mit dem dekrement arbeitest i--
Dann lässt du die Schleife laufen solang i >= 0
Dann kannst du direkt über hoch [i] die Daten in umgekehrter Reihenfolge aus deinem Array holen.
Verstehe ich das richtig, dass du einfach die Werte aus dem einen Array umgedreht in das andere Array schreiben willst? (Also die Werte sind nicht durcheinander, sondern schon aufsteigend im ersten Array?)
public static int[] reverseArray(int[] input) {
// neues Array mit der Länge von input erstellen
int[] result = new int[input.length];
// Werte von input umgekehrt in result eintragen
for (int i = 0; i<input.length; i++) {
result[input.length - i - 1] = input[i];
}
// Ergebnis zurückgeben
return result;
}
Ausgabe z.B. mit
public static void main(String[] args) {
int[] hoch = {2,3,4,5};
System.out.println(Arrays.toString(hoch));
System.out.println(Arrays.toString(reverseArray(hoch)));
}
Falls das Array vorher noch aufsteigend sortiert werden muss, dann kannst du einfach Arrays.sort benutzen.
public static void main(String[] args) {
int[] hoch = {47,11,0,8,15};
Arrays.sort(hoch);
System.out.println(Arrays.toString(hoch));
System.out.println(Arrays.toString(reverseArray(hoch)));
}
Ich glaube „Hilfe = runter[i]“ müsste nach deiner Logik „Hilfe = i“ sein.
Dieses Problem ist mit Streams deutlich leichter zu lösen. Schau dafür am besten mal in die Antwort von Xearox rein.