1-Dimensionales Array in 2D Array umwandeln

mavinatic

Bekanntes Mitglied
Hallo Leute,

ich bin gerade dabei ein 1-Dimensionales Array in ein 2 Dimensionales Array umzuwandeln und bekomme immer eine Nullpointer Exception, vielleicht könnt ihr mir helfen:

Java:
public class ArrayTest 
{
	String[] array = new String[] 
	{
		"0","0","0","0","0","0","0","0","0","0",
		"0","0","0","0","0","0","0","0","0","0",
		"0","0","0","0","0","0","0","0","0","0",
		"0","0","0","0","0","0","0","0","0","0",
		"0","0","0","0","0","0","0","0","0","0"
	};
	int xSize = 10;
	int ySize = 5;
	
	public ArrayTest()
	{
		int y = 0;
		int x = 0;
		String[][] arr = new String[ySize][];
		
		String[] newArray = new String[xSize];
		for(int i=0;i<array.length;i++)
		{
			if(i % xSize==0 && i > 0)
			{
				//newArray[x] = array[i];
				arr[y] = newArray;
				newArray = new String[xSize];
				y++;
				x=0;
			} else
			{
				newArray[x] = array[i];
				x++;
			}
		}
		
		for(int a=0;a<arr.length;a++)
		{
			for(int b=0;b<arr[a].length;b++)
			{
				System.out.print(arr[a][b]);
			}
			System.out.println();
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new ArrayTest();
	}

}

Ergebnis:
0000000000
000000000null
000000000null
000000000null
Exception in thread "main" java.lang.NullPointerException
at ArrayTest.<init>(ArrayTest.java:40)
at ArrayTest.main(ArrayTest.java:50)


Ich komme nicht weiter, könnt ihr mir nen Tipp geben?
 
Zeile 16 bis 35 kann man durch das ersetzen:
Java:
String[][] arr = new String[ySize][xSize];
for (int i = 0; i < array.length; i++) {
    arr[i % ySize][i / ySize] = array[i];
}
Dann funktioniert es auch 😉
 
zum vorhandenen Code:
beim Wechsel auf das neue Array vergisst du den aktuellen Wert zu setzen, bzw. hast es auskommentiert,
in der Schleibe braucht es kein else, dieser Code ist immer auszuführen,

außerdem wird das letzte neue Zeilen-Array nicht ins 2D-Array übernommen,
besser sorum:
Java:
        String[][] arr = new String[ySize][];
        String[] newArray = null;
        for (int i = 0; i < array.length; i++)    {
            if (i % xSize == 0)     {
                newArray = new String[xSize];
                arr[y] = newArray;
                y++;
                x = 0;
            }
            newArray[x] = array[i];
            x++;
        }
 
grundsätzich überlegen ob man vom ursprünglichen Index durch Berechnung alle neuen Indexe bestimmen kann,
das ist der Fall, also gehts, Rest dann nur Arbeit

1D <-> 2D ist aber auch wirklich ein Standardbeispiel,
viele haben das schon gesehen bevor sie überhaupt die Gelegenheit haben selber darüber nachzudenken
 
1. Das [was SlaterB bereits sagte]
2. Es ist unnötig, nicht gleich beide Tiefen des Arrays anzugeben, denn beide sind immer fix. Da sparst du dir nochmals Code.
 

Zurück
Oben