einführung in die programmierung mit java
DESCRIPTION
Einführung in die Programmierung mit Java. 4. Vorlesung WS 2004/2005. Hausaufgabe:. Erzeugt 4 zufällige double-Werte und gebt das Minimum, das Maximum sowie den Durchschnitt aller Werte aus. Hinweis: Das Minimum (Maximum) der Werte ist der kleinste (größte) aller Werte. Hausaufgabe: Lösung. - PowerPoint PPT PresentationTRANSCRIPT
Institut für Kartographie und GeoinformationDr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag
Einführung in die Programmierung mit Java
4. Vorlesung WS 2004/2005
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
2 2
Hausaufgabe:
Erzeugt 4 zufällige double-Werte und gebt das Minimum, das Maximum sowie den Durchschnitt aller Werte aus.
Hinweis: Das Minimum (Maximum) der Werte ist der kleinste (größte) aller Werte.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
3 3
Hausaufgabe: Lösung
public class MinMaxDurchschnitt{
public static void main(String[] args) {
double min, max;
double a1 = Math.random(); double a2 = Math.random();
double a3 = Math.random(); double a4 = Math.random();
max = Math.max(a1,a2);
max = Math.max(max,a3);
max = Math.max(max,a4);
min = Math.min(a1,a2);
min = Math.min(min,a3);
min = Math.min(min,a4);
double durchschnitt = (a1 + a2 + a3 + a4)/4;
System.out.println(...);
}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
4 4
Übersicht
• Boolesche Ausdrücke (Werte wahr/falsch)
– Relationale Operatoren (==, >,<, ..)
– boolesche Operatoren (und, oder, nicht)
• Kontrollstrukturen
– while
– do - while
– switch
– break
• Arrays
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
5 5
Boolesche Ausdrücke
• Bedingungen in if oder for: Boolesche Ausdrücke • Boolesche Ausdrücke liefern als Rückgabewert
nur einen der zwei (Wahrheits-)Werte true oder false• Beispiele:
– if(i == 0) ...– for(int i = 0 ; i < 1000 ; i = i + 1)...
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
6 6
Relationale Operatoren• Relationale Operatoren bilden spezielle Boolesche Ausdrücke• Relationale Operatoren setzen ihre Operanden zueinander in
Beziehung und liefern den Wahrheitswert der Beziehung zurück.
– Beispiele: 5 < 3 ergibt false(4-2)=2 ergibt true
Mathem. Notation Java Erläuterung
= == Identität (Gleichheit)
!= Ungleichheit
< < kleiner als
<= kleiner oder gleich als
> > größer als
>= größer oder gleich als
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
7 7
Arithmetische und Boolesche Ausdrücke
• Die Operanden von Relationalen Operatoren können arithmetische Ausdrücke sein
• Beispiel:Math.min(5,9) == 5 * 5 - 20 * Math.sin(Math.Pi/2)
Arithmetischer Ausdruck
5
Arithmetischer Ausdruck
5
BoolescherAusdruck
wahr
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
8 8
Komplexe Boolesche Ausdrücke
• Bildung komplexer Boolescher Ausdrücke mit aussagenlogischen Operatoren (nicht, und, oder):
• Nicht / Negation: ¬ true = falsein Java: ! Wert ¬ false = true
• Und-Verknüpfung: false false = falsein Java: Wert1 & Wert2 false true = false
true false = falsetrue true = true
• Oder-Verknüpfung: false false = false in Java: Wert1 | Wert2 false true = true
true false = truetrue true = true
• Beispiel: ((x < 7) | (y == 6)) & !(z < 5)
• Wert bei x = 2 ; y = 6 ; z = 1?
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
9 9
Operatorenreihenfolge (Priorität)
Priorität Operatoren Assoziativität
1 + - Vorzeichen (unär) rechts
1 ! logische Negation rechts
1 (Typ) Typkonversion rechts
2 * / % Multiplikation, Division, Rest links
3 + - Addition, Subtraktion links
4 < <= kleiner, kleiner gleich links
4 > >= größer, größer als links
5 == Gleichheit links
5 != Ungleichheit links
6 & logisches Und links
7 | logisches Oder links
8 = Wertzuweisung rechts
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
10 10
Beispiel: For-Schleife mit komplexer Bedingung
• Es sollen die Zahlen von 1 bis 100 addiert werden, jedoch soll vorher abgebrochen werden,wenn die Summe die Zahl 2000 erreicht hat.
int Summe =0;
for(int i = 1; (i <= 100 & Summe < 2000); i = i+1)
{
Summe = Summe + i;
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
11 11
Übung im GIS-Labor
• Schreibt ein Programm, das die Zahlen von 1 bis 50 aufzählt, wobei anstelle der durch drei oder durch sieben, aber nicht durch 5 teilbaren Zahlen „autsch“ ausgegeben werden soll.
• Tip: Verwendet die Operation % (Rest der ganzzahligen Division): • z.B. 11 % 3 = 2 (11 geteilt durch 3 ist 9 mit Rest 2)• z.B. 33 % 9 = 6 (33 geteilt durch 9 ist 27 mit Rest 6)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
12 12
Kontrollstrukturen: while- und do-while-Schleife
while-Schleife:
Syntax:
while ( boolean-Ausdruck )
Anweisung;
• Schleife mit Eintrittsbedingung– Anweisung wird 0 bis
x-mal ausgeführt
do-while-Schleife:
Syntax:
do
Anweisung;
while ( boolean-Ausdruck );
• Schleife mit Wiederholungsbedingung– Anweisung wird mindestens
einmal ausgeführt
Hinweis: Sollen mehrere Anweisungen im Schleifenrumpf aus-geführt werden, so müssen diese durch geschweifte Klammern zu einem Block zusammengefasst werden.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
13 13
Übung im GIS-Labor
• Schreibt ein Programm, das die natürlichen Zahlen solange summiert, bis die Summe die Zahl 3000 erstmals überschreitet. Gebt die Summe und die Anzahl der natürlichen Zahlen aus.
• Tip: Verwendet while-Schleifen:– while ( boolean-Ausdruck )
Anweisung;
– do Anweisung;
while ( boolean-Ausdruck );
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
14 14
Kontrollstrukturen: switch-Anweisung
• dient zur Realisierung von Fallunterscheidungen
• Syntax:
switch (Ausdruck ) {case Wert1 : Anweisung1; // 1. Fall Ausdruck=Wert1case Wert2 : Anweisung2; // 2. Fall Ausdruck=Wert2. . . default: Ansonsten-Anweisung; // ansonsten}
• es werden alle Anweisungen ab der ersten erfüllten case-Bedingung ausgeführt (inkl. der Ansonsten-Anweisung )
• Ausdruck muss vom Typ byte, short, int oder char sein
• Werti muss eine Konstante vom gleichen Typ wie Ausdruck sein
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
15 15
Beispiel 1 zur switch-Anweisung
Programm:
class Switch1 {public static void main (String args[]) {
int i;for (i=0; i < 10; i=i+1)
switch(i) {case 1: System.out.println("eins");case 2: System.out.println("zwei");case 5: System.out.println("fünf");default: System.out.println(i);}
}}
Ausgabe:
0einszweifünf1zweifünf234fünf56789
Problem: fehlerhafte Ausgabe, da jeweils nach der ersten passenden case-Bedingung alle anderen Anweisungen ohne weitere Überprüfung ausgeführt werden!
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
16 16
Die break-Anweisung (1)
• dient zum Abbruch von switch-Fallunterscheidungen
• Syntax:
switch ( Ausdruck ) {case Wert1 : { Anweisung1; break; }case Wert2 : { Anweisung2; break; }. . . default: Ansonsten-Anweisung;}
• Der Programmablauf wird bei Ausführung eines break-Befehls hinter der switch-Anweisung fortgesetzt!
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
17 17
Beispiel 2 zur switch-Anweisung
Programm:
class Switch2 {public static void main (String args[]) {
int i;for (i=0; i < 10; i=i+1)
switch(i) {case 1: {System.out.println("eins"); break;}case 2: {System.out.println("zwei"); break;}case 5: {System.out.println("fünf"); break;}default: System.out.println(i);}
}}
Ausgabe:
0einszwei34fünf6789
Die Ausgabe ist nun korrekt, da die switch-Anweisung jeweils nach der Ausführung der passenden case-Bedingung mittels break verlassen wird.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
18 18
Die break-Anweisung (2)
• kann auch zum Abbruch von Schleifen (for, while, do-while) eingesetzt werden
Beispiel while-Schleife:
while ( boolean-Ausdruck1 ) {. . .if ( boolean-Ausdruck2 ) break; // Abbruch. . . }
• Der Programmablauf wird hinter der Schleifenanweisung fortgesetzt
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
19 19
Arrays
• Bisher: primitive Datentypen (int, double, ...)
• Arrays als erster nicht-primitiver Datentyp
• Alle Werte haben denselben Typ (z.B. int)
• Zugriff über Index:my_array[2] = 12;
• Indizes fangen mit 0 an
Index Wert
0 45
1 -117
2 12
3 0
4 999
Integer-Array mit fünf Elementen
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
20 20
Arbeiten mit Array-Variablen (I)
3 Schritte: (nur Schritt 2 ist wirklich neu)
1. Deklaration int[] my_array; // Array von Integerzahlen
2. Instantiierung my_array = new int[3];
// Erschafft Array mit 3
Elem.
3. Initialisierung my_array[0] = 17;
my_array[1] = 0;
my_array[2] = -
4*my_array[0];
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
21 21
Arbeiten mit Array-Variablen (II)
Alternative:
• alle drei Schritte auf einmal
• Deklaration mit impliziter Erschaffung und Initialisierung:
int[] my_array = {45, -117, 12, 0, 999};
erschafft ein 5-elementiges Array und initialisiert es mit den
aufgezählten Werten (angefangen bei Index 0).
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
22 22
Hinweise zu Arrays (I)
• Größe eines Arrays kann erst zur Laufzeit feststehen:int[] my_array;int i = ...; //zur Laufzeit berechnetmy_array = new int[i];
• Die Größe eines einmal instantiierten Arrays kann nicht verändert werden.
• Größe eines Arrays kann mittels arrayname.length abgefragt werden:
int laenge = my_array.length;
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
23 23
Beispiel zu Arrays
Programm:
// Bestimmung der kleinsten Zahl eines ganzzahligen Arrays
class Minimum { public static void main (String args[]) { int[] my_array = {45,12,1,13,-4,0,-23,1001}; int minimum, i;
minimum=my_array[0]; for (i=0; i<my_array.length; i=i+1) if (my_array[i]<minimum) minimum=my_array[i];
System.out.print("Die kleinste Zahl ist "); System.out.println(minimum);
}}
Ausgabe:
Die kleinste Zahl ist -23
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
24 24
Mehrdimensionale Arrays
• Anwendungen– zweidimensional: Repräsentation von Matrizen– zwei- und mehrdimensional: Speicherung von Wertetabellen
• Mehrdimensionale Arrays werden durch Arrays von Arrays dargestellt
• Syntax zur Deklaration und Instantiierung eines n-dimensionalen Arrays:
Typ [ ][ ]...[ ] Arrayname = new Typ [d1][d2]...[dn];
• Beispiel:
int[][] matrix = new int[6][3];
erschafft eine zweidimensionale Matrix mit 6 Zeilen und 3 Spalten
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
25 25
Hinweise zu Arrays (I)
• Arrays sind keine primitiven Datentypen– Array-Variablen enthalten nicht selbst das Array, sondern
verweisen auf ein Array, das durch new irgendwo im Hauptspeicher angelegt wird (Array-Variablen sind Referenzen).
Beispiel: int[] myArray=new int[3];
myArray Wert1 Wert2 Wert3
kein simpler Vergleich zweier Arrays möglich:int[] a = {7,12,13,0}; int i = 3;
int[] b = {7,12,13,0}; int j = 3;
System.out.println(a = = b); System.out.println(i = = j);
ergibt die Ausgabe false ergibt die Ausgabe true
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
26 26
Hinweise zu Arrays (II)
• Arrayvariablen sind Referenzen– Wertzuweisung zweier Arrayvariablen kopiert nicht das Array,
sondern setzt beide auf denselben Speicherbereich:– Bsp:
int[] a = {1,2,3};int[] b = {4,5,6};a = b;a[0] = 77;System.out.println(b[0]);
a
1 2 3 4 5 6
b
vor Wertzuweisung a = b
a
1 2 3 4 5 6
b
nach Wertzuweisung a = b
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
27 27
Hausaufgabe
Schreibt ein Programm, das den Wert einer ganzzahligen Variablen w im Bereich von 20 bis 99 so als Text ausgibt, wie er ausgesprochen wird. Gebt dabei alle Werte von 20 bis 99 entsprechend aus.
Ausgabe: w = 20 Ausgabe: "zwanzig" ..................... w = 98 Ausgabe: „achtundneunzig" w = 99 Ausgabe: "neunundneunzig"