2D Matrix erstellen

Erag2327

Mitglied
Ich will mit einer nested for-Loop eine Matrix erstellen. Diese soll 15 Spalten und 10 Zeilen haben.
Mein Code ist folgender:
Java:
int anzahlSpalten = 15;
int anzahlZeilen = 10;

int[][] = new field[anzahlSpalten][anzahlZeilen];

for (int i = 0; i < anzahlSpalten; i++) {
    System.out.println();
    for (int j = 0; j < anzahlZeilen; j++) {
        field[i][j] = 0;
        System.out.println(field[i][j]);
    }
}

Ich bin mir nicht sicher, wie ich es so hinkriege, dass die Schleife jeweils immer in die nächste Spalte springt.
 

httpdigest

Top Contributor
Naja, da Konsolenausgaben immer zeilenweise sind, sollte deine äußere Schleife über die Zeilen (und nicht die Spalten) gehen und deine innere Schleife sollte über die Spalten gehen (und nicht die Zeilen).
Dann kannst du z.B. System.out.print() nutzen für die einzelnen Spalten (nicht println!).
Du erstellst doch aber mit dieser Methode keine Matrix, sondern gibst sie aus.
Bzw. macht deine Methode zwei verschiedene Dinge: Sie setzt jedes Element des Arrays auf 0 und gibt es aus.
 

Erag2327

Mitglied
Naja, da Konsolenausgaben immer zeilenweise sind, sollte deine äußere Schleife über die Zeilen (und nicht die Spalten) gehen und deine innere Schleife sollte über die Spalten gehen (und nicht die Zeilen).
Dann kannst du z.B. System.out.print() nutzen für die einzelnen Spalten (nicht println!).
Verstehe, könnte man es denn auch so hinbekommen, dass man außen über die Spalten und innen über die Zeilen geht?
 

MarvinsDepression

Bekanntes Mitglied
Das funktioniert schon, ist aber tatsächlich eher selten.
Java:
int anzahlSpalten = 15;
int anzahlZeilen = 10;

// int[][] = new field[anzahlSpalten][anzahlZeilen]; <- falsche Syntax
int[][] field = new int[anzahlSpalten][anzahlZeilen];

for (int row = 0; row < anzahlZeilen; row++) {
    System.out.println();
    for (int column = 0; column < anzahlSpalten; column++) {
        field[column][row] = 0; // nach "new int[][]" zum Initialisieren unnötig,
                                // da eh alle Zellen automatisch mit 0 initialisiert werden.
        System.out.print(field[column][row] + " ");
    }
    System.out.println();
}
Schlussendlich ist es vom Verwendungszwech des Arrays abhängig, wie man die Dimensionen interpretiert.
Z.B. um ein "Vier Gewinnt" zu programmieren, würde ich das äußere Array auch als Spalten definieren, da es für den Spielverlauf abhängig ist, in welche Spalte ich / der Gegner den nächsten Token legt. Solange das Array rechteckig ist, sind aber stets beide Versionen möglich.
 

Erag2327

Mitglied
Das funktioniert schon, ist aber tatsächlich eher selten.
Java:
int anzahlSpalten = 15;
int anzahlZeilen = 10;

// int[][] = new field[anzahlSpalten][anzahlZeilen]; <- falsche Syntax
int[][] field = new int[anzahlSpalten][anzahlZeilen];

for (int row = 0; row < anzahlZeilen; row++) {
    System.out.println();
    for (int column = 0; column < anzahlSpalten; column++) {
        field[column][row] = 0; // nach "new int[][]" zum Initialisieren unnötig,
                                // da eh alle Zellen automatisch mit 0 initialisiert werden.
        System.out.print(field[column][row] + " ");
    }
    System.out.println();
}
Schlussendlich ist es vom Verwendungszwech des Arrays abhängig, wie man die Dimensionen interpretiert.
Z.B. um ein "Vier Gewinnt" zu programmieren, würde ich das äußere Array auch als Spalten definieren, da es für den Spielverlauf abhängig ist, in welche Spalte ich / der Gegner den nächsten Token legt. Solange das Array rechteckig ist, sind aber stets beide Versionen möglich.
Danke für die Verbesserung. Wie würde denn beispielhaft eine für Schleife aussehen, die außen die Spalten und innen die Zeilen durchläuft und damit dasselbe Resultat erzielt?
 

MarvinsDepression

Bekanntes Mitglied
das ist für die Konsolenausgabe nur mit umständlichen Umwegen möglich. Wie oben (#2) bereits geschrieben, wird in der Konsole nur zeilenweise ausgegben. Es wäre möglich, für jede Zeile einen String zu schreiben und zum Schluss, wenn sie fertig sind, auszugeben.
 

MarvinsDepression

Bekanntes Mitglied
Java:
anzahlSpalten = 15;
anzahlZeilen = 10;

int[][] field = new int[anzahlSpalten][anzahlZeilen];
String[] lines = new String[anzahlZeilen];

for (int column = 0; column < anzahlSpalten; column++) {
    for (int row = 0; row < anzahlZeilen; row++) {
        if (column == 0) lines[row] = ""; // <- da bin mir nicht sicher, ob das nötig ist
        
        lines[row] += field[column][row] + " ";
        
        if (column = anzahlSpalten-1) {
            System.out.println(lines[row]);
        }
    }
}
So ginge es ohne weitere Schleifen zu verwenden, ist aber grausamer Code.
 

Neue Themen


Oben