Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

DVG1 - 08 - Felder1 Felder. DVG1 - 08 - Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.

Ähnliche Präsentationen


Präsentation zum Thema: "DVG1 - 08 - Felder1 Felder. DVG1 - 08 - Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x."—  Präsentation transkript:

1 DVG Felder1 Felder

2 DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x 1, x 2,..., x n ) Koordinaten eines Punktes in der Ebene (x,y) bzw. im Raum (x,y,z) bilden Felder der Länge 2 bzw. 3. Die Elemente sind reelle Zahlen. Alle Elemente eines Feldes existieren nur als gemeinsames Objekt und haben daher die selbe Lebensdauer. Feldelemente können beliebigen Typ haben, also auch selber Felder sein. Feldelemente werden immer zusammenhängend abgespeichert. In Java beginnen die Indizes immer bei Null, d.h. (x 0, x 1,..., x N-1 ). Felder werden immer über Referenzen (handles) verwaltet.

3 DVG Felder 3 Feldvereinbarung Mögliche Vereinbarungen von Feldvariablen: ElementTyp [] name; (möglich ist auch ElementTyp name [];) ElementTyp kann ein beliebiger Typ sein. ElementTyp [] ist dann der FeldTyp. Es werden Referenzen auf Felder erzeugt, nicht die Felder selbst! Die Referenzen werden mit null initialisiert. null ist die Referenz auf nichts. Referenzen sind streng typgebunden. z.B.: long [] binomial; Es wird die Referenz auf ein Feld mit dem Namen binomial erzeugt. Die Elemente des Feldes haben den Typ long. Das Feld hat den Typ long []. Die Referenz wird mit dem Wert null initialisiert.

4 DVG Felder 4 Felderzeugung Felderzeugung ohne Initialisierung ElementTyp [] name; name = new ElementTyp [laenge]; oder ElementTyp [] name = new ElementTyp [laenge]; Felderzeugung mit Initialisierung ElementTyp [] name = {wert0, wert1,..., wertN-1}; äquivalent zu ElementTyp [] name = new ElementTyp [N]; name[0] = wert0; name[1] = wert1;... name[N-1] = wertN-1;

5 DVG Felder 5 Die Länge von Feldern wird zur Laufzeit berechnet. Die Länge eines Feldes kann 0 sein. Leeres Feld. Die Länge eines Feldes darf nicht negativ sein. Sonst Ausnahme. Die Länge eines Feldes kann immer mit Feldname.length bestimmt werden. Z.B.: int [] feld = new int [Integer.parseInt(args[0])]; for (int i=0; i

6 DVG Felder 6 Benutzung von Feldelementen Der Zugriff zu Feldelementen erfolgt über den Feldnamen und den Index. Feldname[index] Der Index ist immer vom Typ int. Das erste Feldelement hat den Index 0 und das letzte den Index Feldname.length-1. Die Einhaltung der Feldgrenzen wird streng geprüft! ==> Feldname[-1] und Feldname[Feldname.length] führen zu Laufzeitfehlern. Die Adresse des i-ten Feldelementes ergibt sich aus: Adresse des 0-ten Feldelements + i*(Länge eines Feldelementes)

7 DVG Felder 7 Feld mit N Elementen Element 0 Element 1 Element 2 Element 3 Element N-1 Länge eines Elements (L) Gesamtlänge N*L Referenz Länge der Referenz Metainformationen Länge der Metainformationen

8 DVG Felder 8 Lebensdauer von Feldern Felder sind ausschließlich über Referenzen erreichbar. ==> Existiert keine Referenz auf ein Feld, so können die in dem Feld enthaltenen Daten nicht mehr benutzt werden. Es können mehrere Referenzen auf dasselbe Feld existieren. Z.B.: long [] feld1, feld2; feld1=new long[100]; feld2=feld1; Die Anweisung feld2=feld1; bewirkt, dass die Referenz kopiert wird nicht, das Feld! Felder merken sich in den Metadaten wie viele Referenzen auf das Feld existieren. Existiert keine Referenz mehr, wird das Feld durch Garbage Collection (Müllsammlung) freigegeben.

9 DVG Felder 9 Objekt 1 Objekt 3 Objekt 5 Objekt 7 Objekt 9 Freier Hauptspeicher Belegter Hauptspeicher Objekt 9 Objekt 8 Objekt 1 Objekt 2 Objekt 3 Objekt 4 Objekt 5 Objekt 6 Objekt 7 Objekt 8

10 DVG Felder 10 Felder als Parameter von Methoden Parameter werden immer als Wert übergeben! Beispiel: public static float ScalarProduct(float[]x, float[]y) { float s = 0.0f; for (int i=0; i

11 DVG Felder 11 Beispiel: public static void AddArray(float[]x, float[]y) { for (int i=0; i

12 DVG Felder 12 Felder können als Wert einer Methode benutzt werden. Beispiel: public static float [] concatArray(float[]x, float[]y) { float [] c = new float[x.length+y.length]; for (int i=0; i

13 DVG Felder 13 Mehrdimensionale Felder Mehrdimensionale Felder werden nicht direkt unterstützt, d.h. ein zweidimensionales Feld ist ein eindimensionales Feld von Referenzen auf eindimensionale Felder. Da ElementTyp ein beliebiger Typ sein kann, kann es selber auch ein Feldtyp sein. Z.B. int [] [] i2; i2 ist eine Referenz auf ein Feld von Referenzen auf Felder von int- Größen. Direkte Erzeugung eines M-dimensionalen Feldes: ElementTyp [] []... [] feld = new ElementTyp [N0][N1]...[NM-1];

14 DVG Felder 14 Sukzessive Erzeugung eines mehrdimensionalen Feldes: ElementTyp [] []... [] feld = new ElementTyp [N0][]... []; for (int i=0; i

15 DVG Felder 15 Initialisierung int [][] feld = { {0,1,2,3,4,5}, {10,11,12}, {20,21,22,23,24,25,26} }; ist äquivalent zu: int [][] feld = new int [3] []; feld[0]= new int[6]; feld[1]= new int[3]; feld[2]= new int[7];...

16 DVG Felder 16 Referenz Metainformationen Referenz 0 Referenz 1 Referenz 2 Referenz i Referenz N-1 Element i 0 Element i 1 Element i 2 Element i 3 Element i M i -1 Metainformationen iElement 0 0 Element 0 1 Element 0 2 Element 0 3 Element 0 M 0 -1 Metainformationen 0


Herunterladen ppt "DVG1 - 08 - Felder1 Felder. DVG1 - 08 - Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x."

Ähnliche Präsentationen


Google-Anzeigen