Oft möchte man viele gleichartige Daten (d.h. Daten mit demselben Datentyp) speichern, z.B. die ersten 1000 Primzahlen. Stell Dir vor, Du müsstest für jede dieser Zahlen einen eigenen Variablennamen vergeben:
int p1 = 2; int p2 = 3; int p3 = 5; ... int p1000 = ?!?
Oder stell Dir vor, Du möchtest dann diese 1000 gespeicherten Zahlen kommasepariert ausgeben (2, 3, 5, 7, …):
println(p1 + ", " + p2 + ", " + p3 + ", " + p4 + ", " + ... + p1000);
Kein Mensch möchte das tippen müssen. Das muss doch besser gehen!
Ein Array (deutsch: „Feld“) ist ein Datentyp, der es gestattet, viele gleichartige Daten (d.h. Daten mit demselben Datentyp) zu speichern und durch Angabe eines Indizes (d.h. ihrer Position innerhalb des Feldes) schnell auf sie zuzugreifen.
Beispiel:
Lege ein Feld an, in dem 10 int
-Werte gespeichert werden können und nenne dieses Feld test
.
int[] test = new int[10];
Dabei ist int[]
der Datentyp „Feld von int
-Werten“. Der Term new int[10]
reserviert einen Speicherbereich, in dem 10 int
-Werte Platz haben, füllt ihn mit zehn 0-Werten und liefert eine Referenz darauf zurück. Nach der Zuweisung (=
) zeigt die Variable test
auf diesen Speicherbereich.
Die zehn Werte nennt man Feldelemente. Sie werden mit den Indizes 0 bis 9 durchnummeriert. Du kannst Dir das Feld so vorstellen:
Zugriff auf die Feldelemente:
test[3] = 12;
weist dem vierten(!) Feldelement den Wert 12 zu. Das Feld sieht danach so aus:int a = test[0];
kopiert den Wert des ersten Feldelements in die Variable a
. Was gibt das folgende Programm aus? Denke zuerst nach, bevor Du es ausführst!
Öffne vor dem Ausführen den Reiter „Variablen“ und führe dann das Programm schrittweise aus („Step over“: ). Du kannst so Schritt für Schritt sehen, wie sich die Werte des Feldes verändern und das Programm so ganz leicht verstehen.
Klicke rechts auf auf die kleine Grafik, dann wird Dir das Vorgehen als animated gif gezeigt!
Wir schreiben ein kleines Programm, das den Benutzer nach 5 Namen fragt und diese in einem Array speichert. Anschließend kann der Benutzer Indizes von 0 - 4 eingeben und bekommt den zugehörigen Namen vom Computer genannt.
Natürlich ist dieses Programm noch nicht wirklich praktisch verwendbar, aber Du bekommst ein Gefühl dafür, wozu Arrays gut sind.
werte
, das 10 double-Werte enthält und fülle es mit den Werten sin(0), sin(1), …, sin(9). Verwende dazu eine while- oder for-Wiederholung.
Der Benutzer nennt eine Anzahl n
. Der Computer soll n-mal würfeln und dabei mitzählen, wie oft jede der Zahlen 1 bis 6 vorgekommen ist. Am Ende soll er die absoluten und relativen Häufigkeiten der sechs Zahlen ausgeben.
Was sind absolute und relative Häufigkeiten?
Stell' Dir vor, Du würfelst 50-mal. Dabei erhältst Du 7-mal die Augenzahl 6. Dann nennt man 7 die absolute Häufigkeit des Ereignisses „6 gewürfelt“ und $7/50$ (also 14%) die relative Häufigkeit dieses Ereignisses.
Strategie:
Wir speichern die Anzahl der Einsen, Zweien, Dreien, … Sechsen in einem int-Feld mit 6 Werten
Tipp: Falls Du Dich mit der Berechnung der Zweierpotenzen schwer tust, findest Du hier ein Programm, das die Zweierpotenzen auf dem Bildschirm ausgibt.
Schreibe ein Programm, das es dem Benutzer ermöglicht, 5 Namen einzugeben, und diese 5 Namen am Ende in umgekehrter Reihenfolge ausgibt.
Hier geht's zur Lösung!
Das Sieb des Eratosthenes ist ein sehr schneller Algorithmus zum Finden von Primzahlen, den Du aus dem Mathematikunterricht der Jahrgangsstufe 5 kennst. Falls Du Dich nicht mehr genau erinnerst, hier ein kurzes Erklärvideo dazu:
Schreibe ein Programm, das die Primzahlen bis 100 000 mit Hilfe des Sies des Eratosthenes ermittelt und ausgibt!
Strategie:
gestrichen
von 100 001 Werten des Datentyps boolean
. gestrichen[i]
soll angeben, ob das Zahlenfeld mit der Zahl i
„gestrichen“ ist.gestrichen[0] = true
und gestrichen[1] = true
, denn 0 und 1 sind keine PrimzahlenMath.sqrt(100000)
Erweitere das Programm von Aufgabe 3 so,
Zwei Primzahlen, die den Abstand 2 haben, nennt man ein Primzahlzwilling, z.B. [3 und 5], [5 und 7], [11 und 13], [17 und 19] usw.
Man vermutet, dass es unendlich viele Primzahlzwillinge gibt, dies ist aber bis heute nicht bewiesen.
Ein Feld mit 10 ganzen Zahlen soll mit Zufallszahlen (von 1 bis 100) belegt und ausgegeben werden. Anschließend soll der Rechner es der Größe nach aufsteigend sortieren und erneut ausgeben. Zum Sortieren verwenden wir den Bubble Sort-Algorithmus. Hier eine kurze Erklärung:
Schreibe ein Programm, das ein Feld mit 10 zufälligen ganzen Zahlen von 1 bis 100 füllt und ausgibt. Danach soll folgendes gemacht werden: