Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Zwei Arrays zusammenführen (http://www.informatikerboard.de/board/thread.php?threadid=3740)


Geschrieben von Zebsche am 23.10.2017 um 13:14:

  Zwei Arrays zusammenführen

Meine Aufgabe ist es zwei geordnete Arrays so zusammenzuführen, dass das neue Array wieder ein geordnetes ist. Jedoch habe ich ein das Problem das die Längen des Arrays nicht zusammenpassen. ich hoffe mir kann jemand weiterhelfen
Mit freundlichen Grüßen

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:
package sample;

public class Aufgabe13 {
    public static void main(String[] args) {
        int j = 0, u = 0;
        int[] x = {1, 5, 7};
        int[] y = {2, 4, 5};
        int length = x.length + y.length;

        int[] z;
        z = new int[length];

        int i = 0;
        while (i < length) {

            if (x[j] <  y[u] && j <x.length) {
                z[i] = x[j];
                j++;

            } else {
                z[i] = y[u];
                u++;
            }
            i++;
        }


    }
}



Geschrieben von Karlito am 23.10.2017 um 16:48:

 

Hallo Zebsche,

die Längen der Arrays passen zusammen. u überschreitet aber den maximalen Index von y.

Gruß,

Karlito



Geschrieben von as_string am 23.10.2017 um 16:51:

 

Hallo!

Ich denke, wenn Du bei j schon beim Maximum angekommen bist, musst Du nur noch von y weitere nehmen, umgekehrt, wenn Du bei u beim Maximum bist, nur noch von x.
Du kannst die if-Bedingungen vielleicht dahingehend ändern, dass er immer zuerst überprüft, ob Du mit dem jeweiligen Index schon am Ende des entsprechenden Arrays bist (bzw. eigentlich ja darüber raus) und nur wenn nicht den Rest auswerten.

Gruß
Marco



Geschrieben von Zebsche am 23.10.2017 um 17:06:

  Frage

Ich verstehe nicht wo ich die Länge des arrays überschreibe



Geschrieben von Karlito am 23.10.2017 um 17:50:

 

Im else-Zweig wird u erhöht. Wird u zu groß, gibt es in Zeile 16 im nächsten Schleifendurchlauf einen Zugriffsfehler.

Gruß,

Karlito



Geschrieben von Zebsche am 23.10.2017 um 18:09:

 

dh ich sollte noch eine abfrage machen ob u<y.length?



Geschrieben von as_string am 23.10.2017 um 19:31:

 

Zitat:
Original von Zebsche
dh ich sollte noch eine abfrage machen ob u<y.length?

Ja, aber nicht nur im einen if für u, sondern auch im anderen für j. Das meinte ich eben.



Geschrieben von Zebsche am 24.10.2017 um 08:55:

 

Danke für euere Hilfe ohne euch wäre ichhoch lange gesessen


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:
package sample;

public class Aufgabe13 {
    public static void main(String[] args) {
        int j = 0, u = 0;
        int[] x = {1, 3, 4, 5, 5, 7};
        int[] y = {2, 4, 5};
        int length = x.length + y.length;

        int[] z;
        z = new int[length];

        for (int i = 0; i < length; i++) {

            if (u >= y.length || (j < x.length && x[j] <= y[u])) {
                z[i] = x[j];
                j++;
            } else {
                z[i] = y[u];
                u++;
            }
        }


        for (int b : z) {
            System.out.println(b);
        }
    }


}



Geschrieben von Karlito am 24.10.2017 um 11:26:

 

Daumen hoch Wink


Forensoftware: Burning Board, entwickelt von WoltLab GmbH