Das Problem sind IMHO diese beiden Zeilen:
Code:
if(rueckgabe2.length!=0){for(int i =rueckgabe.length; i <=rueckgabe.length+rueckgabe2.length-1;i++){fneu[i]=rueckgabe2[i];}}
if(rueckgabe3.length!=0){for(int i =rueckgabe.length+rueckgabe2.length; i <=fneu.length-1;i++){fneu[i]=rueckgabe3[i];}}
Du mergest die 3 Felder indem du in den Schleifen mit dem Zähler an den absoluten Grenzen entlanggehst, die du dir aus den Längen der Teil-Felder berechnest. Das ist ja auch soweit ok. i enthält also immer die aktuelle Position des Feldelements des _Zielarrays_, in das du schreiben willst. Nur machst du den Fehler, dass du mit i auf den Inhalt der Ursprungsfelder zugreifst. Hat also das Zielarray die Größe 100 und du beschreibst das Element 91 und bist gerade dabei das "Größer"-Array einzufügen - dass jedoch nur die Länge 10 hat - versuchst du _dort_ auf den 91. Eintrag zuzugreifen und du hast deinen schönen Out-Of-Bounds Fehler.
Lösung: entweder du brichst beim Zugriff auf die Ursprungsfelder das i runter sodass der Zugriff richtig ist oder du schreibst dass so um, dass du mit i immer relativ arbeitest und der Zugriff auf das Urpsprungsarray richtig ist und du nur umrechnen musst, wo du dich im Zielarray befindest.
Eleganter wäre folgendes: du könntest dir ne Methode schreiben, die eine generische variable Liste von Arrays gleichen Typs merged und zurückgibst - und dabei typsicher bleibst!

Aber ich glaube das macht ihr erst später.
Ciao, Christian
BTW: die drei Methoden da sind ja alle im Prinzip gleich bis auf den Vergleichstyp. Versuche mal das auf eine runterzubrechen.