Docsity
Docsity

Prüfungen vorbereiten
Prüfungen vorbereiten

Besser lernen dank der zahlreichen Ressourcen auf Docsity


Download-Punkte bekommen.
Download-Punkte bekommen.

Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo


Leitfäden und Tipps
Leitfäden und Tipps

Programmierung und Software-Entwicklung: Arrays, Skripte von Softwareentwicklung

Einführung in die Informatik: Programmierung und Software-Entwicklung - Die Datenstruktur der Arrays, Grundlegende Algorithmen auf Arrays in Java, Arrays von Objekten

Art: Skripte

2019/2020

Hochgeladen am 09.04.2020

Yvonne_Kiermayer
Yvonne_Kiermayer 🇩🇪

4.3

(38)

1 / 39

Toggle sidebar

Diese Seite wird in der Vorschau nicht angezeigt

Lass dir nichts Wichtiges entgehen!

bg1
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12
Kapitel 8
Arrays
Arrays
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27

Unvollständige Textvorschau

Nur auf Docsity: Lade Programmierung und Software-Entwicklung: Arrays und mehr Skripte als PDF für Softwareentwicklung herunter!

Kapitel 8

Arrays

Ziele

2  Die Datenstruktur der Arrays kennenlernen  Grundlegende Algorithmen auf Arrays in Java implementieren können  Mit Arrays von Objekten arbeiten können

Arrays: Einführung (1)

In vielen Anwendungen werden Tupel (Reihungen/Folgen von Elementen) verschiedener Länge benutzt. Beispiel: Vektoren  [1.0, 1.0]  [0.2, 1.2, 7.0] Beispiel: Zeichenfolgen  ['L', 'M', 'U']  ['C', 'A', 'M', 'P', 'U', 'S'] Solche Tupel können durch Arrays dargestellt werden. 4

Arrays: Einführung (2)

 Ein Array ist ein Tupel von Elementen gleichen Typs.  Auf die einzelnen Elemente (Komponenten) kann über einen Index direkt zugegriffen werden.  Mathematisch kann ein Array mit n Komponenten eines Typs T als eine Abbildung vom Indexbereich {0,…,n-1} in den Wertebereich von T aufgefasst werden. Beispiel: a: ['C', 'A', 'M', 'P', 'U', 'S'] Index: 0 1 2 3 4 5 5

Speicherdarstellung von Array-Objekten

7 Heap length = 3 [0] = 7 [1] = 230 [2] = 17 :int[] length = 6 [0] = 'C' [1] = 'A' [2] = 'M' [3] = 'P' [4] = 'U' [5] = 'S' :char[]

Arraytypen und deren Werte

 Die Werte eines Arraytyps T [] sind Referenzen auf Array-Objekte des Typs T [] sowie (wie bei Klassentypen) die leere Referenz null.  Dementsprechend speichern lokale Variablen eines Arraytyps Referenzen auf ein Array oder den Wert null.  Array-Referenzen können mit den Operationen == und != auf Gleichheit bzw. Ungleichheit getestet werden (nicht empfehlenswert, da die Referenzen und nicht die einzelnen Komponenten der Arrays verglichen werden). 8

Grammatik für Ausdrücke mit Arrays

Expression = Variable | Value | Expression BinOp Expression |

UnOp Expression | "(" Expression ")" |

MethodInvocation | InstanceCreation

Variable = NamedVariable | FieldAccess |

ArrayAccess (<-neu)

NamedVariable = Identifier

FieldAccess = Expression "." Identifier

ArrayAccess = Expression "[" Expression "]" (<-neu)

Value = IntegerValue | FloatingPointValue | CharacterValue | BooleanValue | "null"

Grammatik für Methodenaufruf, Objekt- und Arrayerzeugung

MethodInvocation =

Expression "." Identifier "(" [ ActualParameters] ") "

ActualParameters = Expression {"," Expression}

InstanceCreation = ClassInstanceCreation | ArrayCreation (<-neu)

ClassInstanceCreation =

"new" ClassType "(" [ ActualParameters] ") "

ArrayCreation = "new" Type DimExprs {"[ ]"} (<-neu)

DimExprs = "[" Expression "]" {"[" Expression "]" }

Arrayzugriff: Typkorrektheit

ArrayAccess = Expression "[" Expression "]"

 Der erste Expression-Ausdruck (Array-Referenzausdruck) muss einen

Arraytyp T [] haben und der zweite Expression-Ausdruck (Indexausdruck)

muss den Typ int (oder einen kleineren Typ) haben.

 ArrayAccess hat dann den Typ T der Arrayelemente.

Beispiel: Seien char[] a; int[] b; double[][] c; int i,j; lokale Variable. a[3], a[i], a[-8+2*i], a[a.length-1], a[b[i]-3], a[b[i-3]] haben den Typ char. b[0], b[a.length], b[b[i]+7] haben den Typ int. c[i] hat den Typ double[], c[i][j] hat den Typ double.

Arrayzugriff: Auswertung

Sei e[a] ein Arrayzugriffs-Ausdruck. Sei e ein Ausdruck mit Arraytyp T[].

  1. Der Referenzausdruck e wird im aktuellen Zustand (s,h) ausgewertet. Falls der Wert null ist, erfolgt ein Laufzeitfehler (NullPointerException), andernfalls wird die erhaltene Arrayreferenz p gemerkt.
  2. Der Wert v des Indexausdrucks a wird berechnet. Falls v negativ ist oder größer gleich der Länge des mit p referenzierten Arrays ist, erfolgt ein Laufzeitfehler (IndexOutOfBoundsException). Ansonsten wird der die mit v indizierte Komponente des mit p referenzierten Arrays geliefert. Beachte: Falls bei der Auswertung von e keine Exception ausgelöst wird:  e[0] liefert das erste Elemet des Arrays und e[e.length-1] das letzte.  e[e.length] führt zu einer IndexOutOfBoundsException.

Arrayerzeugung: Typkorrektheit

ArrayCreation = "new" Type DimExprs {"[ ]"}

DimExprs = "[" Expression "]" {"[" Expression "]" }

 Für jede Dimension muss der Expression-Ausdruck den Typ int (oder einen

kleineren Typ) haben.

 ArrayCreation hat dann den Typ Type []…[] mit so vielen Klammerpaaren,

wie Dimensionen angegeben wurden. Beispiel: new char[6], new char[22] haben den Typ char[]. new int[3] hat den Typ int[], new String[8] hat den Typ String[]. new double[4][7], new double[4][] haben den Typ double[][].

Arrayerzeugung: Auswertung

Sei new T[d 1 ]…[dn][]…[] ein Arrayerzeugungs-Ausdruck.

  1. Die Werte der Dimensionsausdrücke d 1 ,…,dn werden ausgehend vom aktuellen Zustand von links nach rechts berechnet. Falls ein Wert negativ ist, erfolgt ein Laufzeitfehler (NegativeArraySizeException) und die Auswertung bricht ab.
  2. Ein neues Array-Objekt für den Typ T[]…[][]…[] wird erzeugt, dessen Länge der Wert von d 1 ist, und auf den Heap gelegt.
  3. Die Komponenten des Array-Objekts werden mit Default-Werten initialisiert. ( 0 bei int, false bei boolean, '\0' bei char, null bei Klassen- und Arraytypen).
  4. Solange n noch nicht erreicht ist, wird dieser Vorgang für die einzelnen Komponenten des gerade angelegten Arrays wiederholt. (Z.B. wird bei n = 2 für jede Komponente a[i] (i = 0,.., d 1 - 1) des zuletzt erzeugten Arrays a ein Array der Länge d 2 angelegt.)

Intialisierung von Arrays

19 Durch Einzelzuweisungen an die Komponenten: type[] var = new type[n]; var[0] = v 0 ; . . . var[n-1] = v n- 1 ; Durch sofortige Initialisierung des gesamten Arrays: type[] var = { v 0 , ..., v n- 1 }; Die Syntax von Variablendeklarationen wird in Java dementsprechend auf „Arrayinitialisierer“ erweitert.

Initialisierung von Arrays: Beispiel

20  Einzelzuweisungen an die Komponenten: char[] a = new char[6]; a[0] = 'C'; a[1] = 'A'; a[2] = 'M'; a[3] = 'P'; a[4] = 'U'; a[5] = 'S';  Sofortige Initialisierung des gesamten Arrays: char[] a = {'C', 'A', 'M', 'P', 'U', 'S'}; Der Typ von a ist char[], d.h. der Typ eines eindimensionalen Arrays mit Elementen aus char.