• Keine Ergebnisse gefunden

Brückenkurs Programmieren Tag 4: Arrays Christopher Schölzel

N/A
N/A
Protected

Academic year: 2022

Aktie "Brückenkurs Programmieren Tag 4: Arrays Christopher Schölzel"

Copied!
45
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Brückenkurs Programmieren

Tag 4: Arrays

Christopher Schölzel

Technische Hochschule Mittelhessen

5. September 2019

(2)

Inhalt

Arrays

Wert- vs Referenzsemantik Einleitung

Nachmittag: Java-Objekte erstellen und verwenden

(3)

Inhalt

Arrays

Wert- vs Referenzsemantik Einleitung

Nachmittag: Java-Objekte erstellen und verwenden

3 / 21

(4)

Arrays

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int q1,q2,q3,q4, ... , q100;

for(int i = 1; i <= 100; i++) { if (i == 1) { q1 = i*i; } else if (i == 2) { q2 = i*i; } ...else if (i == 99) { q99 = i*i; } else { q100 = i*i; }

}

⇒ wir brauchen einen Datentyp, der I mehrere Wertespeichern kann

I adressierbarist (z.B. über einen Index)

(5)

Arrays

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int q1,q2,q3,q4, ... , q100;

for(int i = 1; i <= 100; i++) { if (i == 1) { q1 = i*i; } else if (i == 2) { q2 = i*i; } ...else if (i == 99) { q99 = i*i; } else { q100 = i*i; }

}

⇒ wir brauchen einen Datentyp, der I mehrere Wertespeichern kann

I adressierbarist (z.B. über einen Index)

4 / 21

(6)

Arrays

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int q1,q2,q3,q4, ... , q100;

for(int i = 1; i <= 100; i++) { if (i == 1) { q1 = i*i; } else if (i == 2) { q2 = i*i; } ...else if (i == 99) { q99 = i*i; } else { q100 = i*i; }

}

⇒ wir brauchen einen Datentyp, der I mehrere Wertespeichern kann

I adressierbarist (z.B. über einen Index)

(7)

Arrays

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int q1,q2,q3,q4, ... , q100;

for(int i = 1; i <= 100; i++) { if (i == 1) { q1 = i*i; } else if (i == 2) { q2 = i*i; } ...else if (i == 99) { q99 = i*i; } else { q100 = i*i; }

}

⇒ wir brauchen einen Datentyp, der I mehrere Wertespeichern kann

I adressierbarist (z.B. über einen Index)

4 / 21

(8)

Arrays

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int q1,q2,q3,q4, ... , q100;

for(int i = 1; i <= 100; i++) { if (i == 1) { q1 = i*i; } else if (i == 2) { q2 = i*i; } ...else if (i == 99) { q99 = i*i; } else { q100 = i*i; }

}

⇒ wir brauchen einen Datentyp, der I mehrere Werte speichern kann

I adressierbar ist (z.B. über einen Index)

(9)

Arrays: Definition, Datentyp, Adressierung

Definition

Ein Arrayist ein Datentyp, dermehrere Wertevomgleichen Typenthält.

Die Werte werden über einen ganzzahligen Indexadressiert (beginnend mit Index 0).

Arraytyp: Syntax Elementtyp[]

Arraytyp: Beispiele double[]

int[]

String[]

Arrayadressierung: Syntax variablenName[index]

Arrayadressierung: Beispiele doubleArray[0]

doubleArray[1]

doubleArray[i+1]

5 / 21

(10)

Array als Regal

(11)

Array als Regal

6 / 21

(12)

Array als Regal

(13)

Arrays: Erzeugung

Variante 1: Syntax new Elementtyp[Anzahl]

Variante 1: Beispiele new int[17]

new double[8]

new String[i+1]

Variante 2: Syntax new Elementtyp[]{

Element1, Element2, ... }

Variante 2: Beispiele

new int[]{ 1, 1, 2, 3, 5 } new double[]{3.1416, 2.7183} new String[]{

"Mr. "+name,

"Ms. "+name }

7 / 21

(14)

Arrays: Erzeugung

Variante 1: Syntax new Elementtyp[Anzahl]

Variante 1: Beispiele new int[17]

new double[8]

new String[i+1]

Variante 2: Syntax new Elementtyp[]{

Element1, Element2, ...

}

Variante 2: Beispiele

new int[]{ 1, 1, 2, 3, 5 } new double[]{3.1416, 2.7183}

new String[]{

"Mr. "+name,

"Ms. "+name }

(15)

Arrays: Beispiel

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int[] sq = new int[100];

for(int i = 0; i < sq.length; i++) { sq[i] = (i+1)*(i+1);

}System.out.println(sq[7]);

1. Erzeuge ein Array von 100 Ganzzahlen.

2. Fülle das Array mit Quadratzahlen. I Index 0: 12

I Index 1: 22 I Index 2: 32 I ...

3. Test: Gib das Element an Index 7 aus.

8 / 21

(16)

Arrays: Beispiel

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int[] sq = new int[100];

for(int i = 0; i < sq.length; i++) { sq[i] = (i+1)*(i+1);

}System.out.println(sq[7]);

1. Erzeuge ein Array von 100 Ganzzahlen.

2. Fülle das Array mit Quadratzahlen. I Index 0: 12

I Index 1: 22 I Index 2: 32 I ...

3. Test: Gib das Element an Index 7 aus.

(17)

Arrays: Beispiel

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int[] sq = new int[100];

for(int i = 0; i < sq.length; i++) { sq[i] = (i+1)*(i+1);

}System.out.println(sq[7]);

1. Erzeuge ein Array von 100 Ganzzahlen.

2. Fülle das Array mit Quadratzahlen.

I Index 0: 12 I Index 1: 22 I Index 2: 32 I ...

3. Test: Gib das Element an Index 7 aus.

8 / 21

(18)

Arrays: Beispiel

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int[] sq = new int[100];

for(int i = 0; i < sq.length; i++) { sq[i] = (i+1)*(i+1);

}System.out.println(sq[7]);

1. Erzeuge ein Array von 100 Ganzzahlen.

2. Fülle das Array mit Quadratzahlen.

I Index 0: 12 I Index 1: 22 I Index 2: 32 I ...

3. Test: Gib das Element an Index 7 aus.

(19)

Arrays: Beispiel

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int[] sq = new int[100];

for(int i = 0; i < sq.length; i++) { sq[i] = (i+1)*(i+1);

}System.out.println(sq[7]);

1. Erzeuge ein Array von 100 Ganzzahlen.

2. Fülle das Array mit Quadratzahlen.

I Index 0: 12 I Index 1: 22 I Index 2: 32 I ...

3. Test: Gib das Element an Index 7 aus.

8 / 21

(20)

Arrays: Beispiel

Aufgabe

Finde die Quadrate aller Zahlen von 1 bis 100.

int[] sq = new int[100];

for(int i = 0; i < sq.length; i++) { sq[i] = (i+1)*(i+1);

}System.out.println(sq[7]);

1. Erzeuge ein Array von 100 Ganzzahlen.

2. Fülle das Array mit Quadratzahlen.

I Index 0: 12 I Index 1: 22 I Index 2: 32 I ...

3. Test: Gib das Element an Index 7 aus.

(21)

Aufgabe: Zinseszinsen

1. Erstelle ein Array von 100 Fließkommazahlen.

2. Schreibe den Wert 1000 an die erste Stelle des Arrays.

3. Fülle das restliche Array, indem du immer den Wert des vorherigen Elements mit 1.01 multiplizierst.

Erinnerung: Arraydefinition und -zugriff

int[] ar = new int[10]; // Erzeugen/Definieren

ar[3] = 10; // Beschreiben

System.out.println(ar[0]); // Auslesen

int l = ar.length; // Länge ermitteln

Bonus: Finde heraus, nach wie viel Schritten der Ursprungswert sich verdoppelt hat. Benutze dazu zuerst eine Schleife und finde dann eine bessere Methode.

9 / 21

(22)

Aufgabe: Zinseszinsen

1. Erstelle ein Array von 100 Fließkommazahlen.

2. Schreibe den Wert 1000 an die erste Stelle des Arrays.

3. Fülle das restliche Array, indem du immer den Wert des vorherigen Elements mit 1.01 multiplizierst.

Erinnerung: Arraydefinition und -zugriff

int[] ar = new int[10]; // Erzeugen/Definieren

ar[3] = 10; // Beschreiben

System.out.println(ar[0]); // Auslesen

int l = ar.length; // Länge ermitteln

Bonus: Finde heraus, nach wie viel Schritten der Ursprungswert sich verdoppelt hat. Benutze dazu zuerst eine Schleife und finde dann eine bessere Methode.

(23)

Mehrdimensionale Arrays

Frage: Was hält uns davon ab, den Typ int[][] zu verwenden?

Antwort: Gar nichts. Beispiel

int[][] ar = new int[][]{ new int[]{1, 2, 3}, new int[]{4, 5, 6}, new int[]{7, 8, 9}

};for(int row=0; row < ar.length; row++) {

for(int column=0; column < ar[row].length; column++) { System.out.println(ar[row][column]);

} }

10 / 21

(24)

Mehrdimensionale Arrays

Frage: Was hält uns davon ab, den Typ int[][] zu verwenden?

Antwort: Gar nichts.

Beispiel

int[][] ar = new int[][]{

new int[]{1, 2, 3}, new int[]{4, 5, 6}, new int[]{7, 8, 9}

};for(int row=0; row < ar.length; row++) {

for(int column=0; column < ar[row].length; column++) { System.out.println(ar[row][column]);

} }

(25)

Mehrdimensionale Arrays

Frage: Was hält uns davon ab, den Typ int[][] zu verwenden?

Antwort: Gar nichts.

Beispiel

int[][] ar = new int[][]{

new int[]{1, 2, 3}, new int[]{4, 5, 6}, new int[]{7, 8, 9}

};for(int row=0; row < ar.length; row++) {

for(int column=0; column < ar[row].length; column++) { System.out.println(ar[row][column]);

} }

10 / 21

(26)

Mehrdimensionale Arrays

Frage: Was hält uns davon ab, den Typ int[][] zu verwenden?

Antwort: Gar nichts.

Beispiel

int[][] ar = new int[][]{

new int[]{1, 2, 3}, new int[]{4, 5, 6}, new int[]{7, 8, 9}

};for(int row=0; row < ar.length; row++) {

for(int column=0; column < ar[row].length; column++) { System.out.println(ar[row][column]);

} }

(27)

Mehrdimensionale Arrays

Frage: Was hält uns davon ab, den Typ int[][] zu verwenden?

Antwort: Gar nichts.

Beispiel

int[][] ar = new int[][]{

new int[]{1, 2, 3}, new int[]{4, 5, 6}, new int[]{7, 8, 9}

};for(int row=0; row < ar.length; row++) {

for(int column=0; column < ar[row].length; column++) { System.out.println(ar[row][column]);

} }

10 / 21

(28)

Arraydefinition: Kurzschreibweise

Langschreibweise

int[][] ar = new int[][]{

new int[]{1, 2, 3}, new int[]{4, 5, 6}, new int[]{7, 8, 9}

};

Kurzschreibweise int[][] ar = {

{1, 2, 3}, {4, 5, 6}, {7, 8, 9}

};

Achtung: Das funktioniert nurinnerhalb einer Variablendefinition, nicht wenn das Array später neu zugewiesen wird.

(29)

Aufgabe: ASCII-Art

Schreibe eine Funktion printAscii, die ein zweidimensionales Array vom Typ char[][] als „Bild“ auf der Konsole ausgibt.

Beispiel

jshell> char[][] image = { { '\\', 'o' ,'/' }, { ' ', '|' ,' ' }, { '/', ' ', '\\' } jshell> printAscii(image);};

\o/| / \

Bonus: Schaffst Du das auch mit einem eindimensionalen Array?

12 / 21

(30)

Aufgabe: ASCII-Art

Schreibe eine Funktion printAscii, die ein zweidimensionales Array vom Typ char[][] als „Bild“ auf der Konsole ausgibt.

Beispiel

jshell> char[][] image = { { '\\', 'o' ,'/' }, { ' ', '|' ,' ' }, { '/', ' ', '\\' } jshell> printAscii(image);};

\o/| / \

Bonus: Schaffst Du das auch mit einem eindimensionalen Array?

(31)

Inhalt

Arrays

Wert- vs Referenzsemantik Einleitung

Nachmittag: Java-Objekte erstellen und verwenden

13 / 21

(32)

Wert- vs Referenzsemantik

Erinnerung

Java unterscheidet zwischen primitiven Typen(z.B. int) und Referenztypen (Arrays und Klassen).

Frage: Produzieren die beiden folgenden Codestücke die gleiche Ausgabe?

int a = 3;

int b;

b = a;

b = 4;

System.out.println(a);

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

System.out.println(a[0]);

(33)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

15 / 21

(34)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

(35)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

15 / 21

(36)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

(37)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

16 / 21

(38)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

(39)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

16 / 21

(40)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

(41)

Wert- vs Referenzsemantik: Zusammenfassung

DerInhaltvon Variablen unterscheidet sich je nach dem, welchen Typ die Variable hat.

I primitiver Typ: Variable enthält Wert I bei Zuweisung wird der Wert direkt kopiert

I Referenztyp: Variable enthält Referenzbzw. Zeiger I verweist auf Speicherstelle an der die Daten liegen I bei Zuweisung wird nur die Referenz kopiert I die Daten bleiben die selben

17 / 21

(42)

Wert- vs Referenzsemantik: Übungsaufgabe

Gemeinsam an der Tafel: Was steht im Speicher, wenn der folgende Code ausgeführt wurde?

float[] ypos;

float[] xpos;

ypos = new float[]{100, 150, 200};

xpos = ypos;

float x = xpos[1];

x *= 2;

ypos[1] += 1;

(43)

Zusammenfassung

Arrays: Erzeugung

double[] dar = new double[4];

int[] iar = new int[]{1,3};

int[] iar2 = {7, 8, 1};

Arrays: Zugriff dar[0] = 1.8;

iar[1] = iar[0]+1;

int l = iar.length;

Mehrdimensionale Arrays int[][] matrix = {

{1, 2, 3}, {4, 5, 6}, {7, 8, 9}

}matrix[0][2] = 0; // 3 -> 0

19 / 21

(44)

Inhalt

Arrays

Wert- vs Referenzsemantik Einleitung

Nachmittag: Java-Objekte erstellen und verwenden

(45)

Mögliche Themen zur Besprechung am Nachmittag

Java-Objekte verwenden

I Wie erstelle ich eine Variable vom Typ Random, Scanner oder StringBuilder?

I Was heißt null?

I Was macht der Operator .?

I Wie finde ich heraus, was ein Objekt von einem bestimmten Typ kann?

21 / 21

Referenzen

ÄHNLICHE DOKUMENTE

[r]

- Du solltest die Vorsätze zu den Zahlen, ihre Symbole und die Zahlenwörter korrekt aufschreiben und zuordnen können. - Du solltest Umrechnungen in den wichtigsten Einheiten

I double bmi(double, double) sieht nach Rechnung aus I erzeugt aber auch Ausgabe. ⇒ Ausgabe lieber in eigener Funktion

Nachmittag: Java-Objekte erstellen und verwenden.. über einen Index).. über einen Index).. über einen Index).. über einen Index).. über einen Index)... Arrays: Definition,

Der Callstack: Simulation Die folgenden Folien zeigen den Zustand des Stacks während der Ausführung des angegebenen Programms inklusive Rücksprungadressen und Ergebnisregister...

zwei Punkte erlauben Zahlbereiche anzugeben. – Bsp.: laptop €100..€200 ,

Durch das Definieren einer Funktion gibt man einer oft benötigten Teillösung einen Namen, damit man sie für verschiedene Eingabewerte (Argumente) anwenden kann und den

Rekursive Funktionen bestehen immer aus den folgenden Bestandteilen: I mindestens ein Basisfall, in dem die Rekursion abbricht und das Ergebnis fest steht I mindestens ein