300 likes | 505 Views
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.
E N D
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
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
Ü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
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
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 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
Arithmetischer Ausdruck 5 Arithmetischer Ausdruck 5 BoolescherAusdruck wahr 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) G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
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 = false true true = true • Oder-Verknüpfung: false false = false in Java: Wert1 |Wert2 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
Operatorenreihenfolge (Priorität) G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
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
Ü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
while-Schleife: Syntax: while ( boolean-Ausdruck ) Anweisung; Schleife mit Eintrittsbedingung Anweisung wird 0 bis x-mal ausgeführt Kontrollstrukturen: while- und do-while-Schleife • 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
Ü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
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
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: 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
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
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: 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
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
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 Integer-Array mit fünf Elementen G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
Arbeiten mit Array-Variablen (I) 3 Schritte: (nur Schritt 2 ist wirklich neu) • Deklaration int[] my_array; // Array von Integerzahlen • Instantiierung my_array = new int[3]; // Erschafft Array mit 3 Elem. • 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
Arbeiten mit Array-Variablen (II) Alternative: • alle drei Schritte auf einmal • Deklaration mit impliziterErschaffung 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
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 mittelsarrayname.lengthabgefragt werden:int laenge = my_array.length; G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
Beispiel zu Arrays Ausgabe: Die kleinste Zahl ist -23 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); } } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
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
Wert1 Wert2 Wert3 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 • 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 falseergibt die Ausgabe true G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
nach Wertzuweisung a = b vor Wertzuweisung a = b a b a b 4 1 1 4 2 5 5 2 3 6 3 6 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]); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05
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" G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 04/05