# 2 Arrays verbinden



## hury (23. März 2008)

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


----------



## zeja (23. März 2008)

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

Dann kannst du System.arraycopy verwenden.


----------



## hury (23. März 2008)

Ja, aber wie funktioniert das auf 2 dimensionalen Arrays?


----------



## zeja (23. März 2008)

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.:

```
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:

```
[AEinsEins, AEinsZWei, AEinsDrei]
[AZweiEins, AZweiZWei, AZweiDrei]
[BEinsEins, BEinsZWei, BEinsDrei]
[BZweiEins, BZweiZWei, BZweiDrei]
```


----------



## hury (23. März 2008)

Hey,

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


```
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:


```
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


----------



## bartulovic (24. März 2008)

versucht den entryPointX auf spielfeld.length zu ändern?

könntest du Instanzierung von entryPointX  und den Arrays auch posten?


----------



## zeja (24. März 2008)

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.


----------



## Thomas Darimont (24. März 2008)

Hallo,

geht auch so:

```
/**
 * 
 */
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:

```
AEinsEins AEinsZWei AEinsDrei 
AZweiEins AZweiZWei AZweiDrei 
BEinsEins BEinsZWei BEinsDrei 
BZweiEins BZweiZWei BZweiDrei
```

Gruß Tom


----------

