Skifahrer auf umgeknickten Baumstamm

Arrays und Ihre Anwendung


Ideen: A. Maier, G. Kompa, Elektronikschule Tettnang

Arrays sind Datenfelder die zur Speicherung mehrerer Werte eines Datentyps dienen. Dies ist dann bspw. sinnvoll, wenn wir eine ganze Reihe von Tagestemperaturen speichern wollen. Man würde nämlich sonst für jeden Tag eine eigene Variable deklarieren müssen.

In diesem Artikel lernst Du den Aufbau von Arrays, wie man sie beschreibt und ausließt. Dabei lernst du auch die Anwendung verschiedener Datentypen und mehrdimensionale Arrays kennen und anwenden.

Arrays deklarieren



Skifahrer auf umgeknickten Baumstamm

Die Tagestemperaturen von 5 Tagen sollen gespeichert werden.

Um nun nicht fünf Variablen zu benötigen, deklariert man ein Array.

int[] tagestemperatur = new int[5];
Dieses Array beginnt mit dem Array-Datentyp, gefolgt von zwei eckigen Klammern. Dann folgt der Array-Name. Nach dem Zuweisungs­operator folgt das Schlüsselwort new und erneut der Datentyp, diesmal aber mit der Arraylänge.

Arrays initialisieren Arrays beschreiben und auf Werte zugreifen



Ein Array wird über den Index beschrieben. Man beachte, dass der Index eines Arrays immer mit 0 beginnt. Auch eine gleichzeitige Deklaration und Initialisierung, die sogenannte Definition ist möglich.

int[] tagestemperatur = {-2,-1,1,0,-1};

Auch der Zugriff auf einen Arrayeintrag erfolgt über dessen Index.

int x = tagestemperatur [3];

Tag 1 2 3 4 5
Temperatur -2 -1 1 0 -1

Array initialisieren

int[] tagestemperatur = new int[5];
tagestempertatur[0] = -2;
tagestempertatur[1] = -1;
tagestempertatur[2] = 1;
tagestempertatur[3] = 0;
tagestempertatur[4] = -1;

Arrays und die Schleife Arrays automatisiert beschreiben und auslesen



int [] tagestemperatur = new int [7];

//Temperatureingabe
Scanner kb = new Scanner(System.in);
for(int i=0; i<7; i++) {
	System.out.print("Temperatur Tag " + (i+1) +": ");
	tagestemperatur[i] = kb.nextInt();
}

//Temperaturausgabe
for(int i=0; i<7; i++) {
	System.out.println(tagestemperatur[i] + "°C");
}

Das automatisierte Beschreiben und Auslesen eines Arrays erfolgt mit einer Schleife. Dazu lässt man einfach den Index durchzählen.

Möchte man den Index als Tagesnummer mit ausgeben, muss zum Index immer noch eins dazu addiert werden.

Alternativ kann man die Arraylänge auch mit der eigenschaft length ermitteln.

for(int i=0; i<tagestemperatur.length; i++)

Aufgabe 1 Wassertemperatur

Die Wassertemperatur eines Bergsees soll über eine Woche aufgezeichnet und ausgewertet werden.

  1. Lege eine neues "Java Projekt" mit alt Strg N namens 05-Arrays an.
  2. Erstelle die Klasse Wassertemperatur und deklariere das Array wassertemperatur für sieben Einträge.
  3. Lass die sieben Tageswerte mithilfe einer Schleife vom Benutzer eingeben. Gib dabei den Index für die einzelnen Tage aus.
  4. Realisiere die Ausgabe der eingegebenen Werte. Lass dabei auch die Wochentage anzeigen.

    Speicher hierzu die Wochentage in einem Array.

    String [] wochentag = {"Montag", "Dienstag", "Mittwoch", ...};
    						

  5. Berechne mit Hilfe einer Schleife den Mittelwert der Wassertemperatur.
Bergsee

Die Ausgabe sollte wie folgt aussehen:

Wassertemperatureingabe
Temperatur Tag 1: -2
Temperatur Tag 2: -1
Temperatur Tag 3: 1
Temperatur Tag 4: 0
Temperatur Tag 5: -1
Temperatur Tag 6: 0
Temperatur Tag 7: -2

Die Wassertemperaturen im Überblick:
Montag -2°C
Dienstag -1°C
Mittwoch 1°C
Donnerstag 0°C
Freitag -1°C
Samstag 0°C
Sonntag -2°C

Die Wochendurchschnittstemperatur beträgt: -0,71 °C


Aufgabe 2 Welche Aussage ist wahr

Wähle die korrekten Aussagen aus.

Welche Deklaration ist korrekt?
Wähle zwei Antworten.

  1. int [] zahl = new int [5];
  2. int [] zahl = new int 5;
  3. int zahl [] = new int [5];
  4. int zahl [5];

Greife auf den 2. Wert des Arrays temp zu.
Wähle eine Antwort.

  1. int x = temp[0];
  2. int x = temp[1];
  3. int x = temp[2];
  4. int x = temp[3];

Finde die Anzahl der Fehler im folgenden Quelltext.
int [] temp = {2.3,2,5,6};
System.out.println(temp[3] + "°C");
System.out.println(temp[4] + "°C");

  1. 0 Fehler
  2. 1 Fehler
  3. 2 Fehler
  4. 3 Fehler

Finde die Anzahl der Fehler im folgenden Quelltext.
double [] temp = {2.3,2.1,5.0,6.0,-0.1};
System.out.println(temp[3] + "°C");
System.out.println(temp[4] + "°C");

  1. 0 Fehler
  2. 1 Fehler
  3. 2 Fehler
  4. 3 Fehler

Gib alle Elemente des Arrays aus.
int [] x = {9,2,5,6};
Wähle zwei Antworten.

  1. for(int i=1;i<5;i++) System.out.print(x[i]);
  2. for(int i=0;i<4;i++) System.out.print(x[i]);
  3. for(int i=1;i<=4;i++) System.out.print(x[i-1]);
  4. for(int i=1;i<=4;i++) System.out.print(x[i+1]);

Gib alle Elemente des Arrays aus.
double [] x = {0.3,0.2,5,6};
Wähle eine Antwort.

  1. for(int i=1;i<5;i++) System.out.print(x[i-1]);
  2. for(int i=0;i<3;i++) System.out.print(x[i]);
  3. for(int i=1;i<=4;i++) System.out.print(x[i]);
  4. for(int i=1;i<=4;i++) System.out.print(x[i+1]);

Lies den 3. und 4. Wert des Arrays ein.
int [] zahl = new int [5];
Wähle eine Antwort.

  1. for(int i=3;i<4;i++) zahl[i] = kb.nextInt();
  2. for(int i=4;i<5;i++) zahl[i] = kb.nextInt();
  3. for(int i=2;i<4;i++) zahl[i] = kb.nextInt();
  4. for(int i=0;i<4;i++) zahl[i] = kb.nextInt();

Überschreibe den 1. und 2. Wert.
int [] x = {3,2,5,6};
Wähle eine Antwort.

  1. for(int i=3;i<=4;i++) x[i-2] = kb.nextInt();
  2. for(int i=4;i<5;i++) x[i] = kb.nextInt();
  3. for(int i=1;i<2;i++) x[i-1] = kb.nextInt();
  4. for(int i=1;i<=2;i++) x[i-1] = kb.nextInt();

Mehrdimensionale Arrays



Auch mehrdimensionale Arrays sind möglich. Ein zweidimensionales Array gleicht einer Tabelle. Eine 4x4-Matrix bildet man wie folgt ab:

int[][] matrix = new int[4][4];

Ein Adressbuch kann man bspw. wie folgt erstellen:

String[][] adressen = {
                { "Max", "Mustermann", "Musterstr. 3", "71289 Musterstadt" },
                { "John", "Doe", "232 Washington Street", "San Diego 92101" },
                { ... }};

Vorname Name Straße Ort
Max Muster­mann Musterstr. 3 71289 Musterstadt
John Doe 232 Washington Street San Diego 92101
Jane Doe 64 Munich Street Washington 20005

Aufgabe 3 Adressbuch

  1. Erstelle die Klasse Adressbuch und definiere das Array adressen mit fünf Einträgen. Davon sollten zwei Einträge den identischen Wohnort haben.
  2. Lass alle Vornamen mithilfe einer Schleife ausgeben.
  3. Gib alle Nachnamen in einer Zeile, mit Komma getrennt aus.
  4. Gib alle Adressen mit gleichem Wohnort aus.
  5. Schreibe einen Algorithmus der die Einträge alphabetisch sortiert.
Vorname Name Straße Ort
John Doe 232 Washington Street San Diego 92101
Jane Doe 64 Munich Street Washington 20005

Die Lösung sollten folgende Programmteile enthalten:

  1. String[][] adressen = { ... };
  2. System.out.println(adressen[i][0]);
  3. System.out.print(adressen[i][1]);
    if(i<4)  System.out.print(", ");
  4. if(adressen[i][3]=="88069 Tettnang") {
       ...

Aufgabe 4 Lottoprogramm

Lottoziehung

❷ ❶ ❺ ❸ ❽


  1. Erstelle die Klasse Lotto welche die Ziehung von fünf Lottozahlen zwischen 0 und 9 simuliert. Erstelle die zwei Arrays lottoziehung und lottotip mit fünf Einträgen. Doppelte Zahlen sind zulässig.
  2. Speicher auf dem Array lottotip fünf vom Benutzer eingegebene Werte.
  3. Speicher auf dem Array lottoziehung fünf zufällige Werte zwischen 0 und 9.

    Erzeugung einer Zufallszahl zwischen 0 und 9:

    lottoziehen[i] = new java.util.Random().nextInt(10);
    						

  4. Gib die Ziehung, den Tip und die Anzahl der Richtigen aus.
  5. Beschreibe, wie man die sechs Zufallszahlen eines Würfels erzugen kann.
  6. Erweitere das Programm so, dass keine doppelten gezogen werden können.

Die Ausgabe sollte wie folgt aussehen:

Tip abgeben:
Zahl 1: 2
Zahl 2: 2
Zahl 3: 2
Zahl 4: 2
Zahl 5: 2

Die Lottozahlen:
5 2 9 9 3
Ihr Tip:
2 2 2 2 2
Sie haben 1 Richtige!


Aufgabe 5 Fibonacci

Fibonaccizahlen ist eine Reihe von Zahlen. Sie berechnen sich immer aus der Summe der beiden vorherigen Zahlen.

  1. Erstelle die Klasse Fibonacci welche die ersten 20 Fibonacci­zahlen in einem Array speichert. Deklariere das Array fibonaccizahlen.
  2. Befülle das Array fibonaccizahlen mit den ersten 20 Fibonacci­zahlen.

    Die ersten beiden Werte trägt man manuell ein. Danach kann man die aktuelle Fibonacci­zahl immer aus den beiden vorherigen berechnen:

    fibonaccizahlen[i] = fibonaccizahlen[i-1] + fibonaccizahlen[i-2] ;
    						

  3. Gib die Zahlen am Bildschirm aus.

Fibonaccizahlen

❶ ❷ ❸ ❺ ❽ ...


Die Lösung sollten folgende Programmteile enthalten:


  1. int [] fibonaccizahlen = new int [20];
    fibonaccizahlen[0] = 1;
    fibonaccizahlen[1] = 2;

  2. fibonaccizahlen[i] = fibonaccizahlen[i-2]+fibonaccizahlen[i-1];

  3. System.out.println("Zahl " +(i+1)+ ": "+fibonaccizahlen[i]);

Aufgabe 6 Corona

Idee: Prof. Dr. M. Kipp, Hochschule Augsburg

boolean[] corona = new boolean[10];

for(int i = 0; i < corona.length; i++) {
   // Dein Code

   System.out.println(corona[i]); // Kontrolle
}
					
  1. Erstelle die Klasse Corona welche die Anzahl der Coronainfizierten simuliert.
  2. Speicher auf dem Array corona 10  Werte vom Datentyp boolean. Da das Infektionsrisiko bei 10 % liegt, setze mit Hilfe einer Schleife jeden Wert mit 10 % Wahrscheinlichkeit auf true.

    Für ein Infektionsrisiko von 10 % kann man bspw. eine Zufallszahl zwischen 1 und 100 erzeugen. Dann prüft man, ob die Zahl zwischen 1 und 10 liegt. Falls ja, ist die Person infiziert.

  3. Stelle fest, ob mindestens einer infiziert ist.
  4. Stelle fest, ob alle infiziert sind. Verändere dazu die Infektionswahrscheinlichkeit auf 95 %.

Die Ausgabe sollte bspw. folgendermaßen aussehen:

Zufallswerte: 87 90 9 32 9 55 6 4 18 82
4 Infizierte


Entspann dich erstmal ...



Die Fabel vom Vogel

Ein kleiner Vogel flog wegen des Winters in den Süden.

Er war jedoch spät dran und es war schon sehr kalt. Der Vogel fiel steif gefroren auf den Boden. Während er dort so lag, kam eine Kuh des Weges und ließ einen Fladen auf ihn fallen. Der tiefgefrorene Vogel begann aufzutauen und merkte, wie schön warm es in dem Kuhfladen war. Er war so froh darüber, dass er einen Freudengesang anstimmte.

Eine vorbeikommende Katze hörte ihn, folgte dem Gesang, fand den Vogel, holte ihn unter dem Kuhfladen hervor und fraß ihn auf!

Die Moral von der Geschichte:

  1. Nicht jeder, der auf dich scheißt, ist dein Feind!
  2. Nicht jeder, der dich aus der Scheiße holt, ist dein Freund!
  3. Und wenn du in der Scheiße sitzt - halt bloß die Klappe!
Vogel in Südkorea

Sortieralgorithmen Bubble-Sort



Um Zahlenreihen zu sortieren gibt es viele Sortieralgorithmen

int[] reihe = {7,4,9,2,3};

Der Bubble-Sort-Algorithmus gehört zu einem der einfachen Algorithmen. Dabei wird die Reihe von links nach rechts durchlaufen und benachbarte Zahlen der Reihe miteinander verglichen sowie ggf. vertauscht. Wie Luftblasen im Wasser aufsteigen, bewegen sich dabei die größeren Zahlen schrittweise nach rechts. Beim ersten Durchlauf wird zumindest die größte Zahl ganz nach rechts geschoben, beim zweiten Durchlauf die zweitgrößte Zahl u.s.w. Dazu verwendet man zwei ineinander verschachtelte for-Schleifen:

for(int n=4; n>0; n--) { 
  for(int i=0; i<4; i++) {
    if(reihe[i]>reihe[i+1]) {
	  //Tauschen
    }
  }
}

Aufgabe 7 Zahlenreihen sortieren

Autoren: D. Supper, A. Maier |binnendifferenziert

int [] zahlenreihe = {4,5,1,9,2,...};

for(int n=10; n>0; n--) { 
  for(int i=0; i<9; i++) {
    if(zahlenreihe[i]>zahlenreihe[i+1]) {
      //Dein Code zum Tauschen zweier Elemente
    }
  }
}
  1. Erstelle die Klasse BubbleSort welche eine Zahlenreihe sortiert.
  2. Speicher auf dem Array zahlenreihe 10  Werte vom Datentyp int. Achte darauf, dass die Werte unsortiert sind. Gib Werte am Monitor aus.
  3. Sortiere die Zahlenreihe mit dem Bubble-Sort-Algorithmus und gib die sortierte Reihe aus. Optimiere den Algorithmus, so dass die innere Schleife das letzte Element des vorherigen Durchlaufs nicht mehr beachtet, da das restliche Array keine kleineren Einträge mehr hat.

    Man verwendet die verschachtelte for-Schleife zum Sortieren.

    Zum Tauschen der Zahlen wird ein Eintrag auf einer Hilfsvariablen gespeichert.

  4. Erstelle die Zahlenreihe, indem wie beim Lottoprogramm 10 Zahlen zufällig bestimmt werden.
  5. Achte darauf, dass keine doppelten Zahlen in der Reihe vorkommen.
  6. Sortiere die Zahlenreihe mit alternativen Sortieralgorithmen, wie den Insertion-Sort- und Selection-Sort-Algorithmus.
  7. Wie viele Durchläufe benötigt der Bubble-Sort-Algorithmus maximal. Bewerte die Zeitdauer der verschiedenen Sortieralgorithmen.

Die Ausgabe sollte bspw. folgendermaßen aussehen:

Die unsortierte Zahlenreihe:
16 17 8 4 3 19 14 10 5 1

Die sortierte Zahlenreihe:
1 3 4 5 8 10 14 16 17 19


Aufgabe 8 Schafe und Bären

3 Schafe und 3 Wölfe fliehen vor einem Feuer.

Dabei müssen Sie einen Fluss mit einem Floß überqueren. Damit die Schafe von den Wölfen nicht gefressen werden, dürfen sie auf keiner Seite zu keiner Zeit in Unterzahl sein. Auf dem Floß haben immer nur 2 Tiere Platz.

Bestimme die Anzahl der notwendigen Floßfahrten, so dass keines der Tiere verloren geht.

Fertige eine Skizze an.

drei Schafe

Es sind sechs Floßfahrten notwendig.


Wortliste und Satzbausteine



das Array, -s ein Datenfeld, das zur Speicherung mehrerer Werte eines Datentyps dient
der Index, Indizes Nummer einzelner Zellen eines Datenfeldes über den der Zugriff erfolgt
die Deklaration eines Arrays
int[] werte = new int[5];
das zwei­dimen­sionale Array, -s ein Array mit Spalten und Zeilen
die Deklaration eines zwei­dimen­sionalen Arrays
int[] matrix = new int[5][7];
der Bubble-Sort-Algorithmus Sortieralgorithmus der auf Basis von Vergleichen eine Zahlenreih sortiert