tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von vfl_freak
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
1714
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    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();
        }
    }
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    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

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Zitat Zitat von vfl_freak Beitrag anzeigen

    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
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Habe es mir eben nochmal etwas genauer angeschaut - so ganz wird das in der zweiten Schleife eh' nicht klappen !

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    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 !!) :
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    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
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    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
     

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    jau, war unsauber - hast Recht

    dann eher so:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    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 ) passt

    gruß
    Klaus
    Amaninho bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  7. #7
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    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 nichts hilft iwie
     

  8. #8
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Ende gut alles gut deine if abfrage hat mir den kick gegeben habs raus danke
     

  9. #9
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.443
    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.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    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;
    }
     

  10. #10
    Amaninho Amaninho ist offline Mitglied
    Registriert seit
    May 2011
    Beiträge
    19
    Ne die Aufgabe lautet abwechselnd zusammenfügen....
    hab jetzt allerdings ein anderes Problem 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....

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
    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);
        }
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Arrays Zusammenfügen; Hilfe!-programmspinnt.jpg  
    Geändert von Amaninho (22.05.11 um 19:48 Uhr)
     

  11. #11
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.443
    Stimmt, das hab ich wohl überlesen :-D
     

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 16.09.08, 14:57
  2. Arrays mit teilw. gleichen Weten zusammenfügen
    Von brauch_mehr_schlaf im Forum PHP
    Antworten: 2
    Letzter Beitrag: 27.08.05, 03:45
  3. Antworten: 1
    Letzter Beitrag: 02.06.05, 21:39
  4. Arrays! Bitte Hilfe
    Von TheLuCKer im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 01.11.04, 22:37
  5. Hilfe mit Arrays
    Von aRR im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 11.03.04, 10:47

Stichworte