Array-Hausübung - ArrayIndexOutOfBoundsException

Mampf

Mitglied
Hallo!

Bräuchte etwas Hilfe bei folgender Aufgabenstellung:

Ziel ist es, den Benutzer ganzzahlige Werte für zwei Arrays einlesen zu lassen (der Benutzer gibt vorher die Längen der beiden Arrays an und wird nach werten für jede Position gefragt)
Die Werte der beiden Arrays sollen dann in ein drittes Array, welches so groß wie die beiden vorigen ist eingelesen werden und absteigend sortiert werden.

Das ganze Drumherum funktioniert schon, bloß die Sortierung bereitet mir einiges Kopfzerbrechen.

Java:
for (int i=0; i <=f3.length; i++) { //solange i <= Länge des Arrays 3 ist

  int hv = 0; //hv = hilfsvariable


  if(f3[i] < f3[i+1]) {

    hv = f3[i];
    f3[i] = f3[i+1];
    f3[i+1] = hv;

  }

}

wäre meine Überlegung, durch das f3[i+1] bekomme ich aber eine ArrayIndexOutOfBoundsException beim Kompilieren - logisch, da bei der letzten Position ja wiederum i mit i+1 verglichen wird, aber i+1 nicht mehr im Array ist.

Mein Lehrer hat mir vorgeschlagen, zwei verschachtelte for-Schleifen zu erstellen, um jede Position im Array mit allen anderen zu vergleichen, aber irgendwie komm ich einfach nicht auf die Lösung...:(

Schon mal danke für eure Hilfe
 

cr33p

Mitglied
Probiers mal mit Selection Sort.
Klick

Musst du denn selber ein Sortierverfahren implementieren oder kannst du auch auf Java-Mittel zurückgreifen? Wenn ja,
Java:
Arrays.sort(array);
 

Final_Striker

Top Contributor
wäre meine Überlegung, durch das f3[i+1] bekomme ich aber eine ArrayIndexOutOfBoundsException beim Kompilieren - logisch, da bei der letzten Position ja wiederum i mit i+1 verglichen wird, aber i+1 nicht mehr im Array ist.

Also wenn dir das logisch ist, wäre es wahrscheinlich auch logisch die Abbruchbedingung jetzt so anzupassen, dass es nicht mehr übers Array läuft.

Mein Lehrer hat mir vorgeschlagen, zwei verschachtelte for-Schleifen zu erstellen, um jede Position im Array mit allen anderen zu vergleichen, aber irgendwie komm ich einfach nicht auf die Lösung...:(

Ja du brauchst 2 for-Schleifen.

Was du im Moment macht ist nur:

1 5 2 6 -> 5 2 6 1

deshalb deinen Ansatz in noch eine for-Schleife packen die über das Array läuft. Dieses Sortierverfahren nennt man übrigens BubbleSort. ;-)
 

Mampf

Mitglied
Also gut, wie passe ich denn die Abbruchbedingung (das ist das i <=f3.length;, oder?) richtig an.
Vielleicht das i vorher 1 setzen, aber dann wird ja das letzte Feld nicht mehr verglichen..

Wegen der zwei For-Schleifen: einfach in die erste Schleife die selbe nochmal einfügen und darin dann sortieren?

Falls alle Stricke reißen versuch ichs mit
Java:
Arrays.sort(f3);
, theoretisch dürfte der Lehrer nichts sagen, wenn die Aufgabenstellung so aussieht: Gesucht ist ein Java-Programm, das ein absteigend sortiertes Feld f3 aus f1 und f2 berechnet, sodass f3 alle Zahlen in absteigend sortierter Reihenfolge enthält, die in f1 und f2 vorkommen
 

eRaaaa

Top Contributor
Also gut, wie passe ich denn die Abbruchbedingung (das ist das i <=f3.length;, oder?) richtig an.
Vielleicht das i vorher 1 setzen, aber dann wird ja das letzte Feld nicht mehr verglichen..

Beispiel:
Array : [0,1,2,3,4] - array.length = 5
Du willst jetzt von 0 bis einschließlich ( <= ) Index 5 iterieren, also auch array[5] ...(bzw sogar 6)

Fällt dir was auf? :)
 

Mampf

Mitglied
ah....kann sein, dass dass jetzt falsch ist, aber vielleicht i < f3.length?

Da wären wir dann bei der zweiten for-Schleife.

Edit: Wenn die Schleife nur bis zum vorletzten Feld läuft, wird doch das letzte nicht mehr verglichen, oder bring ich da etwas durcheinander?
 
Zuletzt bearbeitet:

Landei

Top Contributor
Noch mal ganz langsam zum Mitmeißeln:

array.length gibt die Anzahl der "freien Plätze" im Array an. Die Plätze werden aber (aus gutem Grund) beginnend mit 0 numeriert. Ein Array mit array.length==5 hat also die Indizes 0,1,2,3,4. Eine Schleife über ein Array geht immer von 0 bis array.length-1, üblich ist also der Test schleifenvariable < array.length (niemals <=).
 

Oben