Einführung in die Java- Programmierung

Transcrição

Einführung in die Java- Programmierung
Einführung in die JavaProgrammierung
Dr. Volker Riediger
Tassilo Horn
riediger|[email protected]
WiSe 2012/13
1
Wichtig...
●
Mittags Pommes...
●
Praktikum
●
A 230 → C 207
(Madeleine)
●
F 112 → F 113
(Kevin)
●
E 413 → E 313
(Jan)
●
Evaluation
●
Lösungsbeispiele
2
Rückblick
●
●
Rekursive Methoden
●
Fakultät
●
Summe
●
Gerade/Ungerade
Arrays
●
Deklaration & Initialisierung
●
Array-Ausgabe & Array-Benutzereingabe
3
Heutige Themen
●
Mehr (Numerik-)Aufgaben
●
Referenztypen
●
Rechen(un)genauigkeit
●
Zweidimensionale Arrays
●
Heute Mittag und Freitag: Erste Einblicke
in die objektorientierte Programmierung
4
Heutige Themen
●
Referenztypen
●
Mehr Numerik-Aufgaben
●
Rechen(un)genauigkeit
●
Zweidimensionale Arrays
●
Erste Einblicke in die objektorientierte
Programmierung
5
Referenztyp Array
●
●
Sei unten das ein int-Array der Länge 10,
so besteht das Array aus zehn direkt
aufeinanderfolgenden Speicherbereichen
Arrays sind Referenztypen, d.h. die ArrayVariable x in
int[] x = {1, 2, 3};
ist eine Referenz, die auf die erste
Komponente des Arrays zeigt
6
Referenztyp Array
●
Da ein Array ein Referenztyp ist, wird
durch eine Zuweisung keine Kopie
angefertigt:
int[] x = {1, 2, 3};
int[] y = x;
// y ist „Alias“ für x, d.h. y zeigt auf
// den selben Speicherbereich wie x
7
Referenztyp Array
●
Auch die Verwendung als Methodenparameter
erzeugt nur einen Alias
public static void main(String[] args) {
int[] y = {1, 2, 3};
foo(y);
}
public static void foo(int[] x) {
// x ist das selbe Array wie y
}
8
Referenztyp Array
●
Implikationen:
●
●
Wird ein Array als Methodenparameter
übergeben und ändert die Methode das
Array, dann sind die Änderungen auch für
den Aufrufer sichtbar
Will man ein Array kopieren, so muss man ein
neues Array gleichen Typs und gleicher Länge
erzeugen und dann alle Komponenten einzeln
kopieren
–
siehe Übungsaufgabe E.5
9
Demo: ArrayAlsReferenztyp.java
●
Aufgabe: Schreibe eine Methode
loescheArray(), die ein int-Array als
Parameter erhält und alle Komponenten
auf -1 setzt
●
●
Die Methode soll keinen Rückgabewert
haben, da das übergebene Array direkt
modifiziert wird
Teste die Methode, um zu zeigen, dass das
übergebene Array tatsächlich modifiziert
wurde
10
Demo: VektorRechnung.java
●
Aufgabe: Schreibe eine Methode
addVectors(), welche zwei gegebene
Vektoren (int-Arrays) addiert und den
Ergebnisvektor als neues int-Array liefert
●
●
Die beiden übergebenen Vektoren sollen
nicht modifiziert werden
Der Vektorraum darf eine beliebige
Dimension haben, d.h. die Vektoren dürfen
beliebig lang sein, müssen aber gleich lang
sein
11
Demo: VektorRechnung.java
●
Aufgabe: Erweitere die Klasse
VektorRechnung um eine Methode
distance(), die einem die Entfernung
zweier gegebener Punkte berechnet
12
Exkurs: Referenztyp String
●
●
●
Auch Strings sind in Java Referenztypen
Im Gegensatz zu Arrays können Strings
nicht modifiziert werden
Für alle Referenztypen gilt:
●
●
== vergleicht nicht den Inhalt sondern nur
die Referenz (d.h. die Speicheradresse)
Strings kann man mit der equals()Methode vergleichen, für Arrays muss
man eine eigene Methode schreiben
13
Demo: StringGleichheit.java
●
●
●
Diese Demo veranschaulicht, dass nur literale,
inhaltlich gleiche Strings == sind
Sobald ein String erst zur Laufzeit erzeugt wird,
ist er mit hoher Wahrscheinlichkeit nicht mehr
== zu einem String gleichen Inhalts
Also:
●
●
Strings immer mit equals() vergleichen, oder
mit equalsIgnoreCase(), fall Groß-/Kleinschreibung
egal ist
14
Demo: ArrayUtils.java
●
Aufgabe: Erweitere die Klasse ArrayUtils
um drei Methoden arrayEquals(), die
jeweils 2 gegebene int-, long- bzw.
double-Arrays inhaltlich vergleichen
15
Demo: Fibonacci.java
●
Aufgabe: Schreibe eine Methode
fibonacci() die einen int n als Parameter
erhält und dann ein int-Array mit den
ersten n Fibonacci-Zahlen zurückgibt
●
Die erste Fibonacci-Zahl ist 0
●
Die zweite Fibonacci-Zahl ist 1
●
Die n-te Fibonacci-Zahl ist die Summe der (n2)-ten und (n-1)-ten Fibonacci-Zahl
16
Demo: Permutation.java
●
Aufgabe: Lasst uns eine Methode
permutation() schreiben, die 2 ints m
und n (mit m <= n) als Parameter erhält
und dann ein int-Array der Länge m mit
zufälligen Werten aus dem Intervall [1, n]
liefert. Das Array darf keine Duplikate
enthalten!
●
Beispiel: Eine normale Lottoziehung „6 aus
49“ kann dann mit permutation(6, 49)
erfolgen
17
Mehrdimensionale Arrays
●
●
Ein Array kann auch mehr als eine
Dimension haben
Ein mehrdimensionales Array ist ein
Array, dessen Komponenten wieder
Arrays sind
●
●
Beispiel: Eine Matrix ist ein
zweidimensionales Array
Das Array an sich repräsentiert die Zeilen der
Matrix, die einzelnen Komponenten-Arrays
sind die Spalten
18
Mehrdim. Arrays: Deklaration
●
Bei der Deklaration gibt die Anzahl der []
die Dimension an
int[] l;
// 1-dim. Array
int[][] m;
// 2-dim. Array
int[][][] n;
// 3-dim. Array
int[][][][] o; // 4-dim. Array
19
Mehrdim. Arrays: Erzeugung
●
Genau wie eindimensionale Arrays erfolgt die
Erzeugung mit new:
int[] l = new int[10];
// m ist eine 2x3-Matrix
int[][] m = new int[2][3];
// n ist ein „Quader“ der „Breite“ 2,
// „Länge“ 3, und noch undef. „Höhe“
int[][][] n = new int[2][3][];
20
2-dim. Arrays: Erzeugung
●
Auch mehrdimensionale Arrays können in
der Literalform notiert werden:
int[][] m = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
// Frage: was ist m[1][2]?
21
Demo: Matrix.java
●
Aufgabe: Schreibe eine Methode
printMatrix(), die ein zweidimensionales
int-Array erhält und in der gewohnten
Form ausgibt, also z.B.
{{1, 2, 3},
{4, 5, 6},
{7, 8, 9}}
22
Demo: Matrix.java
●
Aufgabe: Schreibe eine Methode
readIntMatrix(), die zwei int-Werte z und
s erhält und dann eine zxs-Matrix vom
Benutzer einliest und zurückgibt
23
Zur Erinnerung: Matrizen
●
Deklaration:
int[][] m;
●
Initialisierung:
m = new int[zeilen][spalten];
●
Zugriff auf einen Wert der Matrix:
m[zeile][spalte]
●
Setzen des Werts einer Komponente:
m[zeile][spalte] = wert;
●
Frage: Was ist der Typ von m[z]?
24
Demo: Matrix.java
●
Aufgabe: Schreibe eine Methode
einheitsmatrix(), die eine natürliche
Zahl n erhält und eine nxn-Matrix
zurückgibt, auf deren Diagonalen überall
der Wert 1 ist, und alle anderen Werte 0
sind
25
2-dimensionale Arrays
●
Ein zweidimensionales Array muss nicht
notwendigerweise „rechteckig“, d.h. eine
Matrix, sein
int[][] x = {{1},
{1, 2},
{1, 2, 3}};
26
Demo: DreiecksArray.java
●
Aufgabe: Schreibe eine Methode
dreiecksArray(), die eine natürliche Zahl n
erhält und dann ein „dreieckiges“,
zweidimensionales Array in der Form
{{1},
{1, 2},
{1, 2, 3}}
zurückgibt.
27