Zusammenführen von Feldern

volki.s89

Mitglied
Bei der Ausführung des Programms bekomme ich immer die Fehlermeldung:
java.lang.ArrayIndexOutOfBoundsException:4

Ich weiß echt nicht was ich falsch gemacht habe, das Programm soll einfach zwei Felder, die schon aufsteigend sortiert sind, zu einem neuen Feld, dass aufsteigend sortiert ist zusammenfügen.

Also der code lautet:

Java:
public class ZusammenführenFelder{

public static int[] merge(int f1 [], int f2[]){

    int n1 = f1.length;
    int n2 = f2.length;
    int n  = f1.length + f2.length;
    int[] f3 = new int[n];
    int i1 = 0;
    int i2 = 0;
    for (int i = 0; i<n;i++){
        if ( f1[i1]<=f2[i2]){
            f3[i] = f1[i1];
            i1++;
        }else{
            if (f2[i2]<=f1[i1]){
                f3[i] = f2[i2];
                i2++;}

    }
}
return f3;
}    
}


Ich wäre sehr dankbar, wenn mir jemand helfen könnte :)
 

eRaaaa

Top Contributor
Verstehst du denn was die ArrayIndexOutOfBoundsException dir sagen will?

Spiels doch mal auf Papier mit einem simplen Beispiel durch:

Array1: 1,2,3
Array2: 4,5,6
=>
n = 6

so die ersten drei Fälle ist f1 immer <= f2 (da 1,2,3 <= 4 ist) d.h. du erhöhst 3x i1, d.h. i1 ist dann = 3
im nächsten Schritt fragst du wieder ab
Code:
if (f1[i1] <= f2[i2]) {
i1 ist wie schon erwähnt 3, den Index 3 im Array1 gibt es aber nicht(nur 0,1,2)..daher fliegt dir dort die Exception!

Das war jetzt nur eine Konstellation, das Problem sollte aber klar sein, überlege dir also was du wie abändern musst
 

volki.s89

Mitglied
Erstmal danke, für die Antwort! Ich weiß jetzt auch wo das Problem ist, aber irgendwie will mir die Lösung nicht einfallen. Ich weiß echt nicht was heute los mit mir ist, aber ich steh voll auf dem Schlauch. :(
 

volki.s89

Mitglied
Also mir fällt nur das hier ein :

Wenn ich die Abbruchbedingung ändere, also for (int i = 0; i1<n1 & i2<n2;i++)

dann hört das Programm an genau dieser fehlerhaften Stelle auf, als nächsten schritt würde ich dann einfach den Rest von f2 an f3 hängen.

Gibt es noch eine andere Lösung ??
 

JUserToto

Aktives Mitglied
Du meinst so?

[Java]
public static int[] merge(int f1 [], int f2[]){

int n1 = f1.length;
int n2 = f2.length;
int n = f1.length + f2.length;
int[] f3 = new int[n];
int i1 = 0;
int i2 = 0;
int i;
for (i = 0 ; i1 < f1.length && i2 < f2.length ; i++){

if ( f1[i1] <= f2[i2]){
f3 = f1[i1];
i1++;
} else {
if (f2[i2] <= f1[i1]){
f3 = f2[i2];
i2++;
}
}
}
while (i1 < f1.length) {
f3 = f1[i1];
i1++;
i++;
}
while (i2 < f2.length) {
f3 = f2[i2];
i2++;
i++;
}
return f3;
}
[/Java]


Eine andere Möglichkeit als diese sehe ich mit Arrays nicht.
Du könntest eine Hilfsmethode schreiben, die das erste Element aus einem Array löscht.
Dann könntest du die beiden Arrays f1 und f2 nach und nach leeren und dann mit der Schleife stoppen, wenn beide Arrays leer sind.
Ich denke das wird aber komplizierter als die obige Lösung.
 

volki.s89

Mitglied
Hey erstmal denke, so hab ich es auch probiert aber, dann sagt er mir , dass er die variable i nicht findet.

Ich hab das jetzt etwas komplizierter hinbekommen, aber wenn diese Version irgendwie funktionieren würde, dann wäre das besser. Siehst du eine Möglichkeit, damit das Programm läuft ?
 

JUserToto

Aktives Mitglied
Hey erstmal denke, so hab ich es auch probiert aber, dann sagt er mir , dass er die variable i nicht findet.

Ich hab das jetzt etwas komplizierter hinbekommen, aber wenn diese Version irgendwie funktionieren würde, dann wäre das besser. Siehst du eine Möglichkeit, damit das Programm läuft ?


Bei mir funktionierts. Du musst halt nur den Parameter i aus der For Schleife nehmen, sonst ist i nur in der for schleife definiert.

Also nicht for (int i = 0 ...)

sondern:
int i;
for (i = 0; ...)
 

volki.s89

Mitglied
ja danke, hab ich vorhin auch gemerkt^^

vorher hab ich es aber so gelöst:

Java:
public class ZusammenführenFelder{

public static int[] merge(int f1 [], int f2[]){

    int n1 = f1.length;
    int n2 = f2.length;
    int n  = n1 + n2;
    int[] f3 = new int[n];
    int i1 = 0;
    int i2 = 0;
    for (int i = 0; i1<n1 & i2<n2;i++){
        if ( f1[i1]<=f2[i2]){
            f3[i] = f1[i1];
            i1++;
        }else{
            if (f2[i2]<=f1[i1]){
                f3[i] = f2[i2];
                i2++;}

    }
        if (i1 == n1 || i2 == n2){
    while ( i1 < n1 || i2 <n2){
    
        if ( i1<n1){
            i++;
            f3[i] = f1[i1];
            i1++;
        }else{
        if (i2<n2)
            i++;
            f3[i] = f2[i2];
            i2++;}  
        
   
    }
        }

}    
return f3;
}
}

umständlich, man man man warum hab ich nicht einfach vorher das i aus der for Schleife entfernt. Das hätte mir eine menge Zeit erspart^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K 2 sortierte Arrays zu einem Arrays zusammenführen Java Basics - Anfänger-Themen 13
D CSV Files richtig zusammenführen Java Basics - Anfänger-Themen 3
L Zusammenführen mehrerer .txt Dateien Java Basics - Anfänger-Themen 4
B String von Stringarrays zusammenführen Java Basics - Anfänger-Themen 2
U Sets zusammenführen Java Basics - Anfänger-Themen 2
H string zu einer Gleitkommazahl zusammenführen Java Basics - Anfänger-Themen 20
G Zwei sortierte Arrays zusammenführen Java Basics - Anfänger-Themen 13
M mehrere Hashtables in eine Zusammenführen Java Basics - Anfänger-Themen 5
J Klassen Klasse als Komponententyp bei Feldern Java Basics - Anfänger-Themen 2
K Warum sind Werte in den Feldern ? Java Basics - Anfänger-Themen 2
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
I Iteration in Feldern Java Basics - Anfänger-Themen 2
H Iterationen in Feldern Java Basics - Anfänger-Themen 3
I Problem mit Feldern Java Basics - Anfänger-Themen 3
D Rekursion mit Feldern - ich raffe es nicht :( Java Basics - Anfänger-Themen 6
E Inhalt von Option Feldern auslesen? Java Basics - Anfänger-Themen 2
A Frag zu Feldern mit den Typ einer Klasse Java Basics - Anfänger-Themen 6
B Ausgabe von Non-static Feldern Java Basics - Anfänger-Themen 8
L Arrays mit unbestimmt vielen Feldern Java Basics - Anfänger-Themen 7
P Schachbrett mit N x N Feldern Java Basics - Anfänger-Themen 11
G java.lang.reflect -> Werte von Feldern ausgeben Java Basics - Anfänger-Themen 11
Z Terminkalender mittels Klassen und Feldern Java Basics - Anfänger-Themen 2
G Variables Initalisieren von Feldern im Fenster Java Basics - Anfänger-Themen 10
Z Beispiel Würfelspiel mit Verwendung von Feldern Java Basics - Anfänger-Themen 7
G Problem bei Anwendung von Feldern Java Basics - Anfänger-Themen 5
W Vorgänger bzw. Nachfolger von String Feldern Java Basics - Anfänger-Themen 12
M Feld von Feldern Java Basics - Anfänger-Themen 5
G Auswahl in DropDown feldern in JSP seiten als Action Aufruf Java Basics - Anfänger-Themen 2
E Problem bei Ausgabe von Feldern und Methoden! Java Basics - Anfänger-Themen 2
J Java zum Anzeigen von Notes RT-Feldern unter Windows Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben