studyklar
GdI 2 · Probeklausur Teil 1 · Aufgabe 3

Ein 4×3-String-Array mit x und O füllen

Zwölf Felder, vier Zeilen, drei Spalten: Drei Zeilen sollen „x“ enthalten, eine „O“. Statt zwölf einzelne Zeilen Code zu schreiben, lassen wir zwei Schleifen die Arbeit machen. Rechts stehen das Programm und das gefüllte Array. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 3

Schreiben Sie Java-Code, der die folgenden Aufgaben durchführt:

  • Erstellen eines zweidimensionalen String-Arrays der Dimension 4 x 3.
  • Möglichst effizientes Füllen des Arrays mit den Strings "x" und "O", so dass es folgenden Inhalt hat:
xxx
xxx
OOO
xxx

Es müssen nur die für diese Aufgaben unmittelbar benötigten Codezeilen notiert werden, keine umgebende Methode und Klasse.

Ein zweidimensionales Array ist eine Tabelle: ein Array, dessen Elemente selbst wieder Arrays sind. „4 x 3“ heißt 4 Zeilen mit je 3 Spalten. Jede Zelle soll den Text "x" oder "O" enthalten, die dritte Zeile ganz "O".

„Möglichst effizient“ verstehen wir so: kurzer Code, der jede Zelle genau einmal beschreibt. Zwölf einzelne Zuweisungen wären richtig, aber nicht effizient geschrieben. Gefragt sind nur die Zeilen, die das Array anlegen und füllen; keine Klasse, keine main-Methode.

Merke: Für jede Zelle einer Tabelle braucht man zwei Schleifen ineinander: die äußere über die Zeilen, die innere über die Spalten.
  1. Das Array anlegen.
  2. Mit zwei Schleifen jede Zelle besuchen.
  3. In jede Zelle das passende Zeichen schreiben.
  4. Zur Probe ausgeben.
  5. Klären, warum diese Lösung effizient ist.

Das Array anlegen

        String[][] feld = new String[4][3];
Spalte 0Spalte 1Spalte 2
Zeile 0feld[0][0]feld[0][1]feld[0][2]
Zeile 1feld[1][0]feld[1][1]feld[1][2]
Zeile 2feld[2][0]feld[2][1]feld[2][2]
Zeile 3feld[3][0]feld[3][1]feld[3][2]

String[][] ist der Typ: ein Array von String-Arrays. new String[4][3] legt 4 Zeilen mit je 3 Zellen an. Gezählt wird ab 0: Die Zeilen heißen 0 bis 3, die Spalten 0 bis 2. feld[2][1] ist also die mittlere Zelle der dritten Zeile.

Noch steht in keiner Zelle ein Text, sondern null („kein Objekt“). Das haben wir am Rechner nachgeprüft. Das Füllen kommt im nächsten Schritt.

Aus Vorlesung 3, Folie 16 („Leeres mehrdimensionales Array“): new int[3][2] erzeugt ein leeres Array mit 3 Zeilen und 2 Spalten.
Aus Blatt 3, Aufgabe 5 („Kinosaal: Plätze reservieren mit einem zweidimensionalen Array“): Dort ist der Kinosaal ein Array aus Reihen; saal[reihe][platz] ist ein Sitz.

Zwei Schleifen besuchen jede Zelle

        for (int i = 0; i < feld.length; i++) {            for (int j = 0; j < feld[i].length; j++) {

Die äußere Schleife geht mit i durch die Zeilen. feld.length ist die Zahl der Zeilen, also 4; i läuft von 0 bis 3.

Für jede Zeile geht die innere Schleife mit j durch die Spalten. feld[i].length ist die Länge der Zeile i, also 3; j läuft von 0 bis 2. Zusammen ergibt das 4 · 3 = 12 Durchläufe, für jede Zelle genau einen.

feld.length statt fest 4 zu schreiben ist kein Muss. Es schützt aber vor Tippfehlern bei den Grenzen.

Aus Vorlesung 2, Folie 19 („for-Schleife“): Im Kopf stehen Startwert, Bedingung und Weiterzählen: for (int i = 0; i < 4; i++) läuft mit i = 0, 1, 2, 3.
Noch 4 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Das Array feld

4 Zeilen, 3 Spalten

Abbildung 1Das Array feld

4 Zeilen, 3 Spalten

public class ArrayFuellen {     public static void main(String[] args) {        String[][] feld = new String[4][3];        for (int i = 0; i < feld.length; i++) {            for (int j = 0; j < feld[i].length; j++) {                feld[i][j] = (i == 2) ? "O" : "x";            }        }         for (String[] zeile : feld) {            for (String zeichen : zeile) {                System.out.print(zeichen);            }            System.out.println();        }    }}
i \ j
0
1
2
0
x
x
x
1
x
x
x
2
O
O
O
3
x
x
x
LegendeDas Programm und das gefüllte Array; links die Zeilen-Indizes i, oben die Spalten-Indizes j.