Wie wandelt man zweidimensionale Arrays in eindimensionale und umgekehrt?
Mit Hilfe einer einfachen Hilfsvariablen kann man die Werte eines zweidimensionalen Arrays in ein eindimensionales einlesen. Hierzu deklariert man zunächst die Hilfsvariable und initialisiert sie mit 0. Man durchläuft anschließend das Ausgangsarray innerhalb zweier geschachtelten Schleifen und übergibt die ausgelesenen Werte dem vorher in der benötigten Größe deklarierten eindimensionalen Array. Als Zählvariable verwendet man die Hilfsvariable.
public class ZweiDim2EinDim {
public static void main(String[] args) {
String[] einString = new String[9];
String[][] zweiString = {
new String[] { "einsEins", "einsZwei", "einsDrei" },
new String[] { "zweiEins", "zweiZwei", "zweiDrei" },
new String[] { "dreiEins", "dreiZwei", "dreiDrei" } };
int counter = 0;
for (int i = 0; i < zweiString.length; i++) {
for (int j = 0; j < zweiString[i].length; j++) {
einString[counter] = zweiString[i][j];
System.out.println(einString[counter]);
counter++;
}
}
}
}
Wie kann man nun den umgekehrten Weg beschreiten,
also ein eindimensionales in ein zweidimensionales Array
überführen?
Zunächst werden ein eindimensionales und ein zweidimensionales
Array deklariert. Das eindimensionale wird in einer Schleife mit
Werten belegt. Im Gegensatz zu obigem Beispiel wird der Einfachheit
halber hier ein int-Array verwendet.
Wiederum werden
zwei verschachtelte Schleifen erzeugt. In der inneren wird wie
gehabt eine vorher erzeugte Hilfsvariable inkrementiert. Sie dient
als Index des eindimensionalen Arrays. Das zweidimensionale wird
über die Zählvariablen der Schleifen abgearbeitet.
public class EinDim2ZweiDim {
public static void main(String[] args) {
int zahl = 3;
int[] einDim = new int[zahl * zahl];
int[][] zweiDim = new int[zahl][zahl];
for (int i = 0; i < zahl * zahl; i++) {
einDim[i] = i;
}
int counter = 0;
for (int i = 0; i < zahl; i++) {
for (int j = 0; j < zahl; j++) {
zweiDim[i][j] = einDim[counter];
System.out.println(i + " | " + j + " | " + zweiDim[i][j]);
counter++;
}
}
}
}