Informatik

Eindimensionale Felder

Am Ende des letzten Kapitels hattest du eine Methode mit fünf einzelnen Parametern – und ein schlechtes Gefühl dabei. Zu Recht. Was fehlt, ist ein Datentyp für viele gleichartige Werte.

Er heißt Feld – auf Englisch Array.

Das Problem

Stell dir vor, du sollst die Notenpunkte von 30 Personen speichern und daraus den Durchschnitt berechnen.

Schreibe auf Papier die ersten Zeilen des Programms, wenn du dafür einzelne Variablen benutzt. Wie viele Zeilen wären es insgesamt? Und wie sähe die Berechnung des Durchschnitts aus?

Auflösung
int punkte1 = 11;
int punkte2 = 8;
int punkte3 = 14;
// ... 27 weitere Zeilen

Und der Durchschnitt:

double schnitt = (punkte1 + punkte2 + punkte3 + ... + punkte30) / 30.0;

Das ist nicht nur mühsam. Es ist prinzipiell falsch gedacht: Sobald 31 Personen im Kurs sind, muss das Programm geändert werden. Die Anzahl gehört aber zu den Daten, nicht zum Programm.

Ein Feld anlegen

Schreibweise Bedeutung
int[] punkte deklariert eine Variable für ein Feld von int-Werten
new int[5] legt ein Feld mit 5 Plätzen an
punkte[2] greift auf den Platz mit dem Index 2 zu
punkte.length liefert die Anzahl der Plätze – ohne Klammern

Der Index beginnt bei 0. Ein Feld mit 5 Plätzen hat die Indizes 0, 1, 2, 3 und 4.

Ein frisch angelegtes Feld ist nicht leer: Bei int stehen überall Nullen, bei double 0.0, bei boolean überall false, bei Objekttypen null.

Ein Bild dazu – ein Feld ist wie eine Kiste mit nummerierten Fächern:

punkte
┌────┬────┬────┬────┬────┐
│ 11 │  8 │ 14 │  6 │ 12 │
└────┴────┴────┴────┴────┘
   0    1    2    3    4     ← Index

Kürzer anlegen

Bei der Kurzform bestimmt die Anzahl der Werte in den geschweiften Klammern die Länge des Feldes. Ein new brauchst du dann nicht.

Diese Form geht nur bei der Deklaration. Später kannst du einem Feld nicht mehr einfach {1, 2, 3} zuweisen.

Die häufigste Fehlermeldung

Sage voraus, was das Programm macht. Führe es dann aus und lies die Fehlermeldung genau.

Auflösung

Die erste Ausgabe liefert 12. Die zweite bricht mit einem Laufzeitfehler ab: Der Index 5 liegt außerhalb des Feldes.

Ein Feld der Länge 5 hat die Indizes 0 bis 4. Diesen Fehler machst du garantiert noch oft – deshalb lohnt es sich, die Meldung zu kennen.

Merke: Der größte gültige Index ist immer length - 1.

Erst denken, dann Rechner

Verfolge das Programm auf Papier. Zeichne die Kiste mit den vier Fächern und trage nach jeder Zeile ein, was wo steht.

Auflösung
0: 24
1: 12
2: 8
3: 36
Zeile Feld danach
new int[4] [0, 0, 0, 0]
zahlen[1] = 12 [0, 12, 0, 0]
zahlen[2] = 8 [0, 12, 8, 0]
zahlen[0] = zahlen[2] * 3 [24, 12, 8, 0]
zahlen[3] = zahlen[1] + zahlen[0] [24, 12, 8, 36]

Die Zuweisungen erfolgen nicht in Indexreihenfolge – das macht die Aufgabe aus.

Aufgabe: Wochentage

Schreibe ein Programm, das eine Zahl von 1 bis 7 einliest und den zugehörigen Wochentag ausgibt.

Löse es ohne if und ohne switch – nur mit einem Feld.

Tipp: Der Versatz

Der Montag ist der Tag Nummer 1, steht im Feld aber an Index 0. Du musst also umrechnen.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Zusatzaufgabe

Ein Feld kann auch die Bühne füllen. Lege ein Feld mit fünf verschiedenen Kostümnamen an – etwa coin_gold, gemBlue, gemRed, keyGreen, star – und stelle die fünf Figuren nebeneinander auf die Bühne.

Du brauchst dafür noch keine Schleife, aber mit einer wird es deutlich kürzer. Wie das geht, siehst du in der nächsten Lektion.


Selbsttest

Eindimensionale Felder

Teilbare URL erstellen

Abschnitte auswählen