• 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!
50
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

(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)

(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)

(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]

(10)

Array als Regal

(11)

Array als Regal

(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 }

(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 fester Länge

Aufgabe

Speichere die Farbe THM-Grün (128, 186, 36) in einem Array von drei ints und gib sie dann im Hexadezimalformat aus.

int[] thmGreen = new int[3]; /* neues Array mit 3 ints anlegen */

thmGreen[0] = 128; /* Rotkanal setzen */

thmGreen[1] = 186; /* Grünkanal setzen */

thmGreen[2] = 36; /* Blaukanal setzen */

System.out.println(

Integer.toString(thmGreen[0], 16) /* Rot als Hex */

+ Integer.toString(thmGreen[1], 16) /* Grün als Hex */

+ Integer.toString(thmGreen[2], 16) /* Blau als Hex */

);

(16)

Arrays: Beispiel fester Länge

Aufgabe

Speichere die Farbe THM-Grün (128, 186, 36) in einem Array von drei ints und gib sie dann im Hexadezimalformat aus.

int[] thmGreen = new int[3]; /* neues Array mit 3 ints anlegen */

thmGreen[0] = 128; /* Rotkanal setzen */

thmGreen[1] = 186; /* Grünkanal setzen */

thmGreen[2] = 36; /* Blaukanal setzen */

System.out.println(

Integer.toString(thmGreen[0], 16) /* Rot als Hex */

+ Integer.toString(thmGreen[1], 16) /* Grün als Hex */

+ Integer.toString(thmGreen[2], 16) /* Blau als Hex */

);

(17)

Arrays: Beispiel fester Länge

Aufgabe

Speichere die Farbe THM-Grün (128, 186, 36) in einem Array von drei ints und gib sie dann im Hexadezimalformat aus.

int[] thmGreen = new int[3]; /* neues Array mit 3 ints anlegen */

thmGreen[0] = 128; /* Rotkanal setzen */

thmGreen[1] = 186; /* Grünkanal setzen */

thmGreen[2] = 36; /* Blaukanal setzen */

System.out.println(

Integer.toString(thmGreen[0], 16) /* Rot als Hex */

+ Integer.toString(thmGreen[1], 16) /* Grün als Hex */

+ Integer.toString(thmGreen[2], 16) /* Blau als Hex */

);

(18)

Arrays: Beispiel fester Länge

Aufgabe

Speichere die Farbe THM-Grün (128, 186, 36) in einem Array von drei ints und gib sie dann im Hexadezimalformat aus.

int[] thmGreen = new int[3]; /* neues Array mit 3 ints anlegen */

thmGreen[0] = 128; /* Rotkanal setzen */

thmGreen[1] = 186; /* Grünkanal setzen */

thmGreen[2] = 36; /* Blaukanal setzen */

System.out.println(

Integer.toString(thmGreen[0], 16) /* Rot als Hex */

+ Integer.toString(thmGreen[1], 16) /* Grün als Hex */

+ Integer.toString(thmGreen[2], 16) /* Blau als Hex */

);

(19)

Aufgabe: Steigungsdreieck

1. Speichere den Punkt (0, 5) in einem int-Array namens p1. 2. Speichere den Punkt (3, 11) in einem int-Array namens p2.

3. Berechne die Steigung zwischen p1 und p2 mit der folgenden Formel.

Steigung zwischen (x1,y1) und (x2,y2) = y2y1

x2x1

Bonus: Verpacke deinen Code in eine Funktion, die zwei int-Arrays übernimmt und die Steigung als double zurückgibt.

(20)

Arrays: Beispiel variabler Länge

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)

Arrays: Beispiel variabler Länge

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.

(22)

Arrays: Beispiel variabler Länge

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.

(23)

Arrays: Beispiel variabler Länge

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.

(24)

Arrays: Beispiel variabler Länge

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.

(25)

Arrays: Beispiel variabler Länge

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 ...

(26)

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.

(27)

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

(28)

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]);

} }

(29)

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]);

} }

(30)

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]);

} }

(31)

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]);

} }

(32)

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]);

} }

(33)

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.

(34)

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?

(35)

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/| / \

(36)

Inhalt

Arrays

Wert- vs Referenzsemantik Einleitung

Nachmittag: Java-Objekte erstellen und verwenden

(37)

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]);

(38)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

(39)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

(40)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

(41)

Wertsemantik bei primitiven Typen

int a = 3;

int b;

b = a;

b = 4;

(42)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

(43)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

(44)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

(45)

Referenzsemantik bei Referenztypen

int[] a = new int[2];

a[0] = 3;

int[] b;

b = a;

b[0] = 4;

(46)

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

(47)

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;

(48)

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

(49)

Inhalt

Arrays

Wert- vs Referenzsemantik Einleitung

Nachmittag: Java-Objekte erstellen und verwenden

(50)

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?

Referenzen

ÄHNLICHE DOKUMENTE

Fertili¬ zation 632 :633/635 Pflanzenkrankheiten und Pflanzenschädlinge — Maladies et para¬ sites des plantes — Plant pests and diseases : 633.1/.3 Krankheiten und Schädlinge

Es wird keine Haftung übernommen für Schäden durch die Verwendung von Informationen aus diesem Online-Angebot oder durch das Fehlen von Informationen.. Dies gilt auch für

Es wird keine Haftung übernommen für Schäden durch die Verwendung von Informationen aus diesem Online-Angebot oder durch das Fehlen von Informationen.. Dies gilt auch für

of roots and tubers Krankheiten und Schädlinge der Faserpflanzen — Maladies et parasites des plantes fibreuses — Pests and diseases of fibres Krankheiten und Schädlinge

Es wird keine Haftung übernommen für Schäden durch die Verwendung von Informationen aus diesem Online-Angebot oder durch das Fehlen von Informationen.. Dies gilt auch für

.192.6 Toxoplasmose — Toxoplasmosis 995.1 Wurminfektionen — Helminthiases — Helminthic infections .121 Durch Cestoden verursachte Krankheiten — Maladies causées par des Cestodes

Oceania Zivilisation unii Kullur der Primitiven — Civilisation et culture des populations primitives — Civilisation and culture of primitive tribes Philosophie der

Krankheiten von Getreide- und Futterpflanzen — Maladies des céréales et plantes fourragères — Pests and diseases of cereals and forage plants Krankheiten von Wurzelfrüchten