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 DVG1 - 08 - Felder1 Felder

2 DVG1 - 08 - 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 DVG1 - 08 - 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 DVG1 - 08 - 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 DVG1 - 08 - 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<feld.length; i++) feld[i]=2*i+1; Feldlänge

6 DVG1 - 08 - 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 DVG1 - 08 - 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 DVG1 - 08 - 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 DVG1 - 08 - 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 DVG1 - 08 - 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<x.length & i<y.length; i++) s += x[i]*y[i]; return s; } Dabei werden die Referenzen kopiert, nicht die Felder! D.h. Felder können als Ausgabeparameter verwendet werden.

11 DVG1 - 08 - Felder 11 Beispiel: public static void AddArray(float[]x, float[]y) { for (int i=0; i<x.length & i<y.length; i++) x[i] += y[i]; } Die Feldelemente von x werden verändert.

12 DVG1 - 08 - 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<x.length; i++)c[i] = x[i]; for (int i=0; i<y.length; i++)c[i+x.length] = y[i]; return c; } float [] e = concatArray(a,b); Es wird Feld erzeugt, das aus der Verkettung von a und b besteht. e = (a[0],...,a[a.length-1],b[0],...,b[b.length-1]) e.length=a.length+b.length

13 DVG1 - 08 - 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 DVG1 - 08 - Felder 14 Sukzessive Erzeugung eines mehrdimensionalen Feldes: ElementTyp [] []... [] feld = new ElementTyp [N0][]... []; for (int i=0; i<N0; i++) feld[i]=new ElementTyp [N1][]...[];... Die Einrichtung von Felder geschieht zur Laufzeit, d.h. die Längen können zur Laufzeit berechnet werden. Bei mehrdimensionalen Feldern können die einzelnen Teilfelder unterschiedlich lang sein.

15 DVG1 - 08 - 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 DVG1 - 08 - 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