Kein Folientitel - Institute of Cartography and Geoinformation

Werbung
Institut für Kartographie und Geoinformation
Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag
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.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
2
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
3
Ü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
4
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
5
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
(4-2)=2
ergibt false
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
6
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
Boolescher
Ausdruck
wahr
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
7
Komplexe Boolesche Ausdrücke
• Bildung komplexer Boolescher Ausdrücke mit
aussagenlogischen Operatoren (nicht, und, oder):
•
Nicht / Negation:
in Java: ! Wert
¬ true = false
¬ false = true
•
Und-Verknüpfung:
in Java: Wert1 & Wert2
false  false = false
false  true = false
true  false = false
true  true = true
•
Oder-Verknüpfung:
in Java: Wert1 | Wert2
false  false = false
false  true = true
true  false = true
true  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
8
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
9
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
10
Ü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
• z.B. 33 % 9 = 6
(11 geteilt durch 3 ist 9 mit Rest 2)
(33 geteilt durch 9 ist 27 mit Rest 6)
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
11
Kontrollstrukturen: while- und do-while-Schleife
while-Schleife:
do-while-Schleife:
Syntax:
Syntax:
while ( boolean-Ausdruck )
Anweisung;
do
• Schleife mit
Eintrittsbedingung
• Schleife mit
Wiederholungsbedingung
– Anweisung wird 0 bis
x-mal ausgeführt
Anweisung;
while ( boolean-Ausdruck );
– Anweisung wird mindestens
einmal ausgeführt
Hinweis: Sollen mehrere Anweisungen im Schleifenrumpf ausgefü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
12
Ü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
13
Kontrollstrukturen: switch-Anweisung
• dient zur Realisierung von Fallunterscheidungen
• Syntax:
switch (Ausdruck ) {
case Wert1 : Anweisung1; // 1. Fall Ausdruck=Wert1
case Wert2 : Anweisung2; // 2. Fall Ausdruck=Wert2
...
default: Ansonsten-Anweisung; // ansonsten
}
• es werden alle Anweisungen ab der ersten erfüllten caseBedingung 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
14
Beispiel 1 zur switch-Anweisung
Programm:
Ausgabe:
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);
}
}
}
0
eins
zwei
fünf
1
zwei
fünf
2
3
4
fünf
5
6
7
8
9
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
15
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 breakBefehls hinter der switch-Anweisung fortgesetzt!
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
16
Beispiel 2 zur switch-Anweisung
Programm:
Ausgabe:
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);
}
}
}
0
eins
zwei
3
4
fünf
6
7
8
9
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
17
Die break-Anweisung (2)
• kann auch zum Abbruch von Schleifen (for, while, dowhile) 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
18
Arrays
Index
Wert
0
45
1
-117
2
12
3
0
4
999
Integer-Array mit
fünf Elementen
• 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
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
19
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
20
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
21
Hinweise zu Arrays (I)
•
Größe eines Arrays kann erst zur Laufzeit feststehen:
int[] my_array;
int i = ...;
//zur Laufzeit berechnet
my_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
22
Beispiel zu Arrays
Programm:
Ausgabe:
// 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;
Die kleinste
Zahl ist -23
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);
}
}
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
23
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
24
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
25
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]);
vor Wertzuweisung a = b
a
b
1 2 3
4 5 6
nach Wertzuweisung a = b
a
1 2 3
b
4 5 6
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
26
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
.....................
w = 98
w = 99
Ausgabe: "zwanzig"
Ausgabe: „achtundneunzig"
Ausgabe: "neunundneunzig"
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
27
Herunterladen