2 Arrays verbinden

hury

Erfahrenes Mitglied
Hi,

ich habe 2 Arrays:

arrayA[][]
arrayB[][]

beide Arrays haben die gleiche Breite. Nun will ich den Inhalt von ArrayB an den von ArrayA anhängen. Und zwar anfangend an eine bestimmte Stelle X, Y, die ich berechne. Gibt es schon irgendwas fertiges, was 2 Arrays zusammenfügt, oder muss ich da mit Schleifen mir was bauen?

Gruß
Alex
 
Du musst ein neues Array anlegen, was genug Platz für die neu hinzukommenden Elemente bietet.

Dann kannst du System.arraycopy verwenden.
 
Genauso wie auf eindimensionalen :)

Es besteht ja kein Unterschied darin ob der Inhalt eines Arrays nun ein String oder ein String-Array ist.

Guck mal, das geht z.B.:
Java:
public static void main(String[] args) {
	final String[][] a = { { "AEinsEins", "AEinsZWei", "AEinsDrei" },
			{ "AZweiEins", "AZweiZWei", "AZweiDrei" } };

	final String[][] b = { { "BEinsEins", "BEinsZWei", "BEinsDrei" },
			{ "BZweiEins", "BZweiZWei", "BZweiDrei" } };

	final String[][] copied = new String[a.length + b.length][3];

	System.arraycopy(a, 0, copied, 0, a.length);
	System.arraycopy(b, 0, copied, a.length, b.length);

	for (String[] arr : copied) {
		System.out.println(Arrays.toString(arr));
	}
}

Ausgabe:
Code:
[AEinsEins, AEinsZWei, AEinsDrei]
[AZweiEins, AZweiZWei, AZweiDrei]
[BEinsEins, BEinsZWei, BEinsDrei]
[BZweiEins, BZweiZWei, BZweiDrei]
 
Hey,

danke - theoretisch ist es klar. Praktisch funktioniert es irgendwie nicht.
Hier ist der Codeabschnitt:

Code:
		final String[][] copied = new String[9][40];

		System.arraycopy(spielfeld, 0, copied, 0, spielfeld.length);
		System.arraycopy(tempFeld, 0, copied, entryPointX, tempFeld.length);
		
		System.out.println("Array spielfeld: ");
		for (String[] arr : spielfeld) {
			System.out.println(Arrays.toString(arr));
		}
		
		System.out.println("Array tempFeld: ");
		for (String[] arr : tempFeld) {
			System.out.println(Arrays.toString(arr));
		}
		
		System.out.println("Array copied: ");
		for (String[] arr : copied) {
			System.out.println(Arrays.toString(arr));
		}
		
	}

und hier die Ausgabe:

Code:
Array spielfeld: 
[1, 1, 5, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[2, 1, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[3, 1, 6, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[4, 2, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[5, 1, 7, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[6, 3, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[7, 1, 8, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[8, 4, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[9, 1, 9, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
Array tempFeld: 
[1, 1, 5, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[2, 1, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[3, 1, 6, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[4, 2, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[5, 1, 7, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[6, 3, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[7, 1, 8, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[8, 4, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[9, 1, 9, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
Array copied: 
[1, 1, 5, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[2, 1, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[3, 1, 6, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[4, 2, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[5, 1, 7, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[6, 3, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[7, 1, 8, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[8, 4, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
[9, 1, 9, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]

Das Array copied müsste aber doch aus Array 1 + 2 bestehen, oder nicht?
Liegt es evtl an dem entryPointX? Sobald dieser != 0 wird bekomme ich eine arrayoutofbounds exception
 
Zuletzt bearbeitet:
versucht den entryPointX auf spielfeld.length zu ändern?

könntest du Instanzierung von entryPointX und den Arrays auch posten?
 
Zuletzt bearbeitet:
Ja dein entryPointX ist zu hoch, bzw. dein copied-Array viel zu klein. Das hat ja nur 9 Zeilen, genauso wie deine anderen beiden Arrays. Also kannst du nach der 9. Zeile auch nichts mehr dahinterkopieren, spricht ein Index von mehr als 0 ist nicht möglich.

Und in x Richtung kannst du sowieso nichts reinkopieren, wenn du das willst musst dus wohl über eine schleife machen. Kopieren geht hier nur in y-Richtung.
 
Hallo,

geht auch so:
Java:
/**
 * 
 */
package de.tutorials;

import java.util.Arrays;

/**
 * @author Thomas.Darimont
 *
 */
public class JoinArrayExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        final String[][] a = { { "AEinsEins", "AEinsZWei", "AEinsDrei" },
                { "AZweiEins", "AZweiZWei", "AZweiDrei" } };
        final String[][] b = { { "BEinsEins", "BEinsZWei", "BEinsDrei" },
                { "BZweiEins", "BZweiZWei", "BZweiDrei" } };
        
        String[][] c = Arrays.copyOf(a, a.length+b.length);
        System.arraycopy(b, 0, c, a.length, b.length);
        
        for(String[] array : c){
            for(String s: array){
                System.out.print(s);
                System.out.print(" ");a
            }
            System.out.println();
        }
    }

}

Ausgabe:
Code:
AEinsEins AEinsZWei AEinsDrei 
AZweiEins AZweiZWei AZweiDrei 
BEinsEins BEinsZWei BEinsDrei 
BZweiEins BZweiZWei BZweiDrei

Gruß Tom
 
Zurück