Java/Array
Dieser Artikel entspricht der Ausarbeitung auf http://informatik.zum.de/pieper/ Dort finden sich ausdruckbare Materialien und die zugehörigen Beispiele.
Zur Konzeption
- Es wird anhand von elementaren Methoden zum Umgang mit dem Array der Array erklärt. Man kann sich dabei auf Mathematik beziehen: x1, x2, x3.. xn als indizierte Variable sollte den Schülern bekannt sein.
- Ein netter Vergleich für Neulinge ist ein "Schubladenschrank" mit nummerierten Schubladen.
- Die Beispiele sind auf den Umgang mit BlueJ hin konzipiert und enthalten daher keine main Methode.
- Es können Parallelen zum Alltag hergestellt werden: Wo nutzen Schüler privat so etwas wie einen Array (z.B. Karteikasten, Buch, Kalender, Handyadressbuch...).
Datenstrukturen
In der Informatik ist eine Datenstruktur eine bestimmte Art, Daten zu verwalten und miteinander zu verknüpfen, um in geeigneter Weise auf diese zugreifen und diese manipulieren zu können. Datenstrukturen sind immer mit bestimmten Operationen verknüpft, um eben diesen Zugriff und diese Manipulation zu ermöglichen.
Das Array ist die einfachste verwendete Datenstruktur. Es werden hierbei mehrere Variablen vom selben Basisdatentyp gespeichert. Ein Zugriff auf die einzelnen Elemente wird über einen Index möglich. (...) Im eindimensionalen Fall wird das Array häufig als Vektor und im zweidimensionalen Fall als Tabelle oder Matrix bezeichnet. Arrays sind aber keinesfalls nur auf zwei Dimensionen beschränkt, sondern werden beliebig mehrdimensional verwendet. Wegen ihrer Einfachheit und grundlegenden Bedeutung bieten die allermeisten Programmiersprachen eine konkrete Umsetzung dieser Datenstruktur als zusammengesetzten Datentyp Array im Grundsprachumfang an. Datenstruktur, Wikipedia – Die freie Enzyklopädie, 18.05.2006 - Der Text ist unter der Lizenz „Creative Commons Attribution/Share Alike“ verfügbar; zusätzliche Bedingungen können anwendbar sein. Siehe die Nutzungsbedingungen für Einzelheiten. In der Wikipedia ist eine Liste der Autoren verfügbar. |
Ein erstes Beispiel
<java> public class ArrayTest1 {
private double[] zahlenFeld; public ArrayTest1() { zahlenFeld = new double[10]; } public void setZahlInFeld(int index, double wert) { zahlenFeld[index]=wert; } public double getZahlInFeld(int index, int wert) { return zahlenFeld[index]; }
} </java>
Die Eigenschaft zahlenfeld wird als Array mit double-Elementen deklariert:
- private double[] zahlenFeld;
Das Kennzeichen hierfür sind die eckigen Klammern. Im Konstruktor wird dann ein neues Array mit 10 Elementen angelegt:
- zahlenFeld = new double[10];
Auf die einzelnen Elemente kann man mit Angabe des Index zugreifen:
- zahlenFeld[5]=27.3;
setzt beispielsweise zahlenFeld mit dem Index 5 auf den Wert 27.3 So erklärt sich die get- und die set-Methode im obigen Beispiel. Natürlich muss bei einem Array noch der Index genannt werden, weshalb sich der Übergabeparameter index ergibt.
Hinweis: Die Zählung eines Arrays beginnt bei 0, daher hat ein Array mit 10 Elementen den höchsten Index 9.
Greift man auf einen Index außerhalb des festgelegten Bereichs zu, so erhält man eine Fehlermeldung. Bei dem obigen Beispiel reicht es, den Index 10 zu wählen.
length
Jeder Array hat die Eigenschaft length, mit der die Länge des Feldes festgestellt werden kann.
<java>
public double getLaenge() { return zahlenFeld.length; }
</java>
Ausgabe aller Werte
Die Ausgabe aller Werte eines Arrays lässt sich einfach mit Hilfe einer einfachen Schleife realisieren, die abbricht, wenn eine Zählvariable (in diesem Fall i) die Länge des Feldes erreicht hat. Denken Sie daran, dass i zunächst auf 0 und nicht auf 1 gesetzt werden muss.
<java>
public void gibAus () { int i=0; while(i<zahlenFeld.length){ System.out.println("Index:"+i+" hat den Wert "+zahlenFeld[i]); i++; } }
</java>
Zufallszahlenfeld
<java>
public void macheZufallsfeld (int maximum) { int i=0; while(i<zahlenFeld.length){ zahlenFeld[i]=(int)(maximum*(Math.random()))+1; i++; } }
</java> Die oben abgebildete Methode weist dem Feld Zufallszahlen (ohne Nachkommastellen) zu. Das ist sehr praktisch, wenn man das Feld nicht von Hand befüllen möchte. maximum gibt obere Grenze an. Die Zufallszahlen liegen also zwischen 1 und (einschließlich) maximum.
Was ist die größte Zahl im Feld
<java>
public double getGroessteZahl () { double maximum=zahlenFeld[0]; int i=1; while(i<zahlenFeld.length){ if (zahlenFeld[i]>maximum) { maximum=zahlenFeld[i]; } i++; } return maximum; }
</java>
Eine typische Aufgabe im Zusammenhang mit Arrays ist, die größte Zahl zu suchen (z.B. Maximaltemperatur bei einer Temperaturzeitreihe). Dabei geht man wie folgt vor:
- Eine Hilfsvariable maximum bekommt den ersten Wert des Feldes zugewiesen.
- Danach werden alle anderen Werte des Feldes durchlaufen und mit maximum verglichen.
- Jedesmal, wenn ein größerer Wert gefunden wurde, wird maximum überschrieben.
Die folgenden Übungen sind alle ähnlich: Sie benötigen eine Schleife, Hilfsvariablen und zumindest bei 1 und 2 eine if-Abfrage.
- Lassen Sie in einer neuen Methode die kleinste Zahl im Feld suchen.
- Lassen Sie in einer neuen Methode den Index und nicht den Wert des größten Elementes zurückgeben.
- Lassen Sie in einer neuen Methode die Summe aller Zahlen im Feld zurückgeben. Der Benutzer soll eine Zahl übergeben. Wenn die Zahl im Feld vorkommt, soll true zurückgegeben werden, wenn nicht false.