Arrays Zusammenfügen; Hilfe!

Amaninho

Grünschnabel
Hallo , ich hab eine Aufgabe zu erledigen und zwar soll ich aus mehreren Arrays mit verschiedenen größen zusammenfügen, das heißt, wenn ich 8 arrays habe soll ich daraus 4 machen aus den 4 soll ich 2 machen und zum schluß 1 array mit allen werten....
hab hier mal bisschen angefangen und erstmals mit 2 Arrays angefangen...
ein Beispiel ==> 1,2,3 & 4,5,6,7,8,9 daraus soll immer abwechselnd entstehen 1,4,2,5,3,6,7,8,9...nun das mach er gut bis zu der 6 aber danach macht er nur 000 rein...
Code:
public final class ArrayZsmFuegen
{
    public eingabe()
    {
    	System.out.println();
    	System.out.println("Eingabe-Arrays:");
           int[] array0 = {1, 2, 3};
           System.out.println(java.util.Arrays.toString(array0));
           int[] array1 = {4, 5, 6, 7, 8, 9};
           System.out.println(java.util.Arrays.toString(array1));
    
       int[] array2 = this.mergeArrays(array0, array1);
       System.out.println();
       System.out.print("Arrays im naechsten Schritt des Zusammenfuegens:");
       this.outputteArray(array2);
    }
   
    
    private final int[] mergeArrays(int[] array0, int[] array1)
    {
        int oldArrayLenghtOne = array0.length;
        int oldArrayLenghtTwo = array1.length;

        int newArrayLenght = (oldArrayLenghtOne + oldArrayLenghtTwo);

        int[] array2 = new int[newArrayLenght];
        
        for(int i = 0, j = 0; i < array0.length; i++, j+=2)
            array2[j] = array0[i];
        for(int i = 0, j = 1; i < array0.length; i++, j+=2)
            array2[j] = array1[i];
        
        return(array2);
    }
    private final void outputteArray(int[] array)
    {
    	System.out.println();
        System.out.print("[");
        for(int number:array)
            System.out.print(number+",");
    	System.out.print("]");
    }
 
    public final static void main(String[] args)
    {
        new eingabe();
    }
}
 
Moin,

Code:
for(int i = 0, j = 0; i < array0.length; i++, j+=2)
            array2[j] = array0[i];
        for(int i = 0, j = 1; i < array0.length; i++, j+=2)
            array2[j] = array1[i];

vermutlich solltest Du im zweiten Fall dann auch über 'array1' laufen ;)

Java:
for( int i = 0, j = 0; i < array0.length; i++, j+=2 )
{
    array2[j] = array0[i];
}
for( int i = 0, j = 1; i < array1.length; i++, j+=2 ) // !!
{
    array2[j] = array1[i];
}

Ich würde das ganze aber besser mit EINER for-Schleife lösen .....

Gruß
Klaus



 
vermutlich solltest Du im zweiten Fall dann auch über 'array1' laufen ;)

Habs auch schon probiert war auch der meinung array1 zum laufen bringen inner 2. schleife, aber er stürtzt immer bei der endausgabe ab :S Exception in thread....

Mit einer Schleife? dann sollte die länge des i<array2.length oder i<newArrayLenght sein oder? ich hab schon vieles ausprobiert aber immer stürtzt das ding ab :(
 
Habe es mir eben nochmal etwas genauer angeschaut - so ganz wird das in der zweiten Schleife eh' nicht klappen !

Code:
int[] array0 = {1, 2, 3};
System.out.println(java.util.Arrays.toString(array0));
int[] array1 = {4, 5, 6, 7, 8, 9};
System.out.println(java.util.Arrays.toString(array1));


int newArrayLenght = (oldArrayLenghtOne + oldArrayLenghtTwo);
int[] array2 = new int[newArrayLenght];
// newArrayLenght ist '9'


for(int i = 0, j = 0; i < array0.length; i++, j+=2)
{
    array2[j] = array0[i];
}
// array2[0] ==> 1
// array2[2] ==> 2
// array2[4] ==> 3


for(int i = 0, j = 1; i < array1.length; i++, j+=2)
{
    array2[j] = array1[i];
}
// array2[1] ==> 4
// array2[3] ==> 5
// array2[5] ==> 6
// array2[7] ==> 7
// array2[9] ==> 8
// array2[11] ==> 9  // den Index 11 gibt es eh' nicht !!

Sobald array1.length größer als array0.length ist, darfst Du 'j' nur noch um 1 inkrementierern

Ich würde es in etwas so versuchen (UNGETESTET !!) :
Java:
for(int i = 0, j = 0; i < array0.length; i++, j+=2)
{
    array2[j] = array0[i];
}

int j = 1;
for(int i = 0; i < array1.length; i++) // wichtig ist "array1", da "array0" eben nur die Länge 3 hat  ******
{
    array2[j] = array1[i];
    if( array1.length > array0.length )
    {
        j++;
    }
    else
    {
	j += 2;
    }
}

Gruß
Klaus
 
Java:
for(int i = 0, j = 0; i < array0.length; i++, j+=2)
{
    array2[j] = array0[i];
}

int j = 1;
for(int i = 0; i < array1.length; i++) // wichtig ist "array1", da "array0" eben nur die Länge 3 hat  ******
{
    array2[j] = array1[i];
    if( array1.length > array0.length )
    {
        j++;
    }
    else
    {
	j += 2;
    }
}

Gruß
Klaus

Hier vergleicht er ja nur die länge des Arrays, er soll es aber erst dann machen wenn array0 keine werte mehr hat :S ich komme leider nicht drauf :(
weil bei dem beispiel guckt er sich direkt am anfang, aha array1 ist länger also fügt er erstmals 1 eins dazu und dann schreibt er nur den inhalt von array1 rein :S
Deine idee ist ziemlich gut...nur ich komme nicht drauf wie man es hinkriegen könnte, dass er z.B. 7 mit einem leeren inhalt vergleicht und sofort weiß aha größer also füge ich hinzu :S
 
Moin,

jau, war unsauber - hast Recht :p

dann eher so:
Java:
for(int i = 0, j = 0; i < array0.length; i++, j+=2)
{
    array2[j] = array0[i];
}
 
int j = 1;
for(int i = 0; i < array1.length; i++) // wichtig ist "array1", da "array0" eben nur die Länge 3 hat  ******
{
    array2[j] = array1[i];
    if( i > array0.length )
    {
        j++;
    }
    else
    {
    j += 2;
    }
}

Hoffe, das es zu der späten Stunden (und der 1:1-Relegationsnachfeier:D ) passt

gruß
Klaus
 
tut mir leid dir das sagen zu müssen, aber klappt auch leider nicht habs auch schon ausprobiert, der stürtzt ab....ich bin seit gestern an dieser aufgabe dran...und finde diesen einen fehler seit gestern nicht :S habs mit allem versucht...i, j, array0, array1, array2 :D nichts hilft iwie
 
Hier noch meine Lösung. System.arraycopy ist in nativem (C++) Code geschrieben und deshalb vor allem bei großen Arrays wesentlich schneller (eventuell bei kleinen langsamer, aber Performance ist nicht alles). Außerdem ließt es sich doch so besser als mit den Schleifen.

Java:
private final int[] mergeArrays(int[] array0, int[] array1)
{
	int[] arr = new int[array0.length + array1.length];
	
	System.arraycopy(array0, 0, arr, 0, array0.length);
	System.arraycopy(array1, 0, arr, array0.length, array1.length);
	
	return arr;
}
 
Ne die Aufgabe lautet abwechselnd zusammenfügen....
hab jetzt allerdings ein anderes Problem :D hab en bild mit angehängt...
falls array0<array1 fängt er so wie es sein soll, mit array0 dann array1 dann array0 usw...
quasi 123 ; 45678 => 14253678
aber wenn array0>array1 dann fängft er bei array1 an obwohl er trotzdem mit array0 anfangen sollte....

Java:
static int[] mergeArrays(int[] array0, int[] array1)
    {
        int oldArrayLenghtOne = array0.length;
        int oldArrayLenghtTwo = array1.length;

        int newArrayLenght = (oldArrayLenghtOne + oldArrayLenghtTwo);

        int[] array2 = new int[newArrayLenght];
        
        int j=-1;
        if(oldArrayLenghtOne>oldArrayLenghtTwo)
        {
             	 for(int i = 0; i < oldArrayLenghtOne; i++)
      		 {	
      		 	 j++;
      		 	//Hier sollte er eigentlich den ersten Inhalt vom ersten
      		 	//array nehmen,dann den von zweiten, leider macht er das 		
      		 	//umgekehrt...wenn ich in der Zeile 74 array1[i] mit 
      		 	//array0[i] und Zeile 77 array0[i] mit array1[i] tausche
      		 	//stürtzt das programm ab!
			if(i<oldArrayLenghtTwo)
			{	
				array2[j] = array1[i];
				j++;
			}
			array2[j]=array0[i];
			
		 }
        }
        else	
        {
      		 for(int i = 0; i < oldArrayLenghtTwo; i++)
      		 {	
      		 	 j++;
      		 	 
      		 	 
			if(i<oldArrayLenghtOne)
			{	
				array2[j] = array0[i];
				j++;
			}
			array2[j]=array1[i];
		
		 }
      	} 
 
        
        return(array2);
    }
 

Anhänge

  • ProgrammSpinnt.jpg
    ProgrammSpinnt.jpg
    49 KB · Aufrufe: 41
Zuletzt bearbeitet:

Neue Beiträge

Zurück