Zwei Arrays vereinen

  • Themenstarter Themenstarter cWaldi
  • Beginndatum Beginndatum
C

cWaldi

Gast
Tag zusammen,

ich versuche gerade ein Programm zu schreiben das zwei Integer Arrays(die aufsteigend sortiert sind) vereint.
Nun bringt mich das ganze aber zum Verzweifeln da die Compiler mir einfach nichts brauchbares zur fehlerquelle sagen und ich auch nichts finde...
Einmal haben die über die Initialisierung von feld3 gemeckert...einmal darüber das ich in der forschleife j=0 setze....bin kurz davor den Rechner ausm fenster zu werfen.


Hier das Programm, ich hoffe ihr könnt mir Helfen.

Java:
public class Blatt3 {
	static public int[] merge(int[] feld1 ,int[] feld2){
		int[] feld3=new int[feld1.length + feld2.length];
		
		for(int i=0, j=0, k=0; i<feld3.length; i++){
			if(feld1[j]>=feld2[k]){
				feld3[i]=feld1[j];
				j++;
			} else {
				feld3[i]=feld2[k];
				k++;
			}
		}	
		return feld3;	
	}
	
	static public void main(String[] args){
		int[] feldA={1,2,3,4,5};
		int[] feldB={6,7,8,9};
		
		int[] feldC = merge(feldA,feldB);
		
		for(int i=0;i<3 ;i++){
			System.out.print(feldC[i]);
		}
		
	}
}
 
Zuletzt bearbeitet von einem Moderator:
>da die Compiler mir einfach nichts brauchbares zur fehlerquelle sagen und ich auch nichts finde...

Der Compiler sagt auch nichts, sondern die JVM.
und zwar
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4

Naja...irgendwo greifst du auf ein Element im Array an der Stelle 4 zu und das Array ist nur 4 oder weniger lang. Sprich: eine Array der Länge 4 hat Elemente an den Stellen 0,1,2,3 , aber nicht 4

EDIT:
ach ja...es passiert übrigens hier
Code:
if(feld1[j]>=feld2[k]){
 
falls du noch eine while Lösung möchtest ;-)
Java:
public static int[] merge(int[] arrayA, int[] arrayB) {
	int sizeA = arrayA.length;
	int sizeB = arrayB.length;
	int[] result = new int[sizeA + sizeB];
	int indexA = 0;
	int indexB = 0;
	int indexResult = 0;
	// vergleiche, solange kein Array am Ende ist..
	while (indexA < sizeA && indexB < sizeB) {
		if (arrayA[indexA] < arrayB[indexB]) {
			result[indexResult++] = arrayA[indexA++];
		} else {
			result[indexResult++] = arrayB[indexB++];
		}
	}
	// den rest auffüllen
	while (indexA < sizeA) {
		result[indexResult++] = arrayA[indexA++];
	}
	while (indexB < sizeB) {
		result[indexResult++] = arrayB[indexB++];
	}
	return result;
}
 

Zurück
Oben