Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 4. Vorlesung WS 2001/2002 Übersicht • Besprechung der Übungsaufgaben • Besondere Zuweisungsbefehle – Prä-/Post-Inkrement bzw. Dekrement • Kontrollstrukturen – Fallunterscheidungen – break-Anweisung • Programmentwicklung für einfache Probleme – Entwicklungs- und Programmierrichtlinien – Namenskonventionen T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 2 1. Übungsaufgabe vom 7. 11. Erzeugen Sie ein Array mit 1000 zufälligen doubleWerten und geben Sie das Minimum, das Maximum sowie den Durchschnitt aller Werte aus. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 3 Lösung zu Aufgabe 1) Teil 1/3 public class Statistik extends java.lang.Object { public static void main (String args[]) { // Variablendeklaration double min, max, summe, mittelwert; int i; // Erzeugen eines Arrays mit 1000 Double-Werten // und füllen des Arrays mit Zufallszahlen double[] werte = new double[1000]; for (i=0; i<werte.length; i=i+1) werte[i]=Math.random(); ... Fortsetzung auf der nächsten Seite T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 4 Lösung zu Aufgabe 1) Teil 2/3 // Bestimmung des Minimums, des Maximums, // der Summe und des Mittelwertes min = werte[0]; // min, max und summe werden max = werte[0]; // mit dem ersten Wert des summe = werte[0]; // Arrays initialisiert. for (i=1; i<werte.length; i=i+1) { // Schleife beginnt summe = summe+werte[i]; // mit 2. Element if (werte[i]<min) min=werte[i]; else if (werte[i]>max) max=werte[i]; } mittelwert = summe / werte.length; ... Fortsetzung auf der nächsten Seite T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 5 Lösung zu Aufgabe 1) Teil 3/3 // Ausgabe des Ergebnisses System.out.print("Minimum: "); System.out.print(min); System.out.print(" Maximum: "); System.out.print(max); System.out.print(" Mittelwert: "); System.out.println(mittelwert); } } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 6 2. Übungsaufgabe vom 7. 11. Drehen Sie die Reihenfolge der Elemente eines Arrays mit Integerzahlen um und geben Sie das Ergebnis aus. Beispiel: gegeben: {4,12,67,90,-10,39,0,1} Ausgabe: {1,0,39,-10,90,67,12,4} a) unter Verwendung eines zweiten Arrays (Zielarray) b) innerhalb des selben Arrays Lösung: a) trivial T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 7 Lösung zu Aufgabe 2) a) public class Array1 extends Object { public static void main (String args[]) { int i; int[] anfangsarray = {4,12,67,90,-10,39,0,1}; int[] zielarray = new int[anfangsarray.length]; for (i=0; i<anfangsarray.length; i=i+1) zielarray [anfangsarray.length-1-i]=anfangsarray [i]; // Ausgabe des Zielarrays for (i=0; i<anfangsarray.length; i=i+1) { System.out.print(zielarray[i]); System.out.print(" "); } } } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 8 2. Übungsaufgabe vom 7. 11. Drehen Sie die Reihenfolge der Elemente eines Arrays mit Integerzahlen um und geben Sie das Ergebnis aus. Beispiel: gegeben: {4,12,67,90,-10,39,0,1} Ausgabe: {1,0,39,-10,90,67,12,4} a) unter Verwendung eines zweiten Arrays (Zielarray) b) innerhalb des selben Arrays Lösung: a) trivial b) 1. Tauschen der Werte mittels Hilfsvariable 2. Vorsicht Falle: Schleife darf nur bis Arraygröße / 2 laufen, sonst wird der Array-Inhalt zweimal umgedreht!! T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 9 Lösung zu Aufgabe 2) b) public class Array2 extends Object { public static void main (String args[]) { int i, tausch; // tausch ist Hilfsvariable int[] array = {4,12,67,90,-10,39,0,1}; for (i=0; i < array.length/2; i=i+1) { tausch=array[i]; // "Dreieckstausch" array[i]=array[array.length-1-i]; array[array.length-1-i]=tausch; } // Ausgabe des Arrays for (i=0; i<array.length; i=i+1) { System.out.print(array[i]); System.out.print(" "); } } } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 10 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 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 11 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! T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 12 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! T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 13 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. T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 14 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 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 15 Entwicklung einfacher Programme 2. Programmentwurf 1. Problemanalyse Software-Entwicklung für einfache Probleme 4. Testen 3. Implementierung T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 16 Software-Entwicklung: Problemanalyse Was sind die Eingangsdaten? Was soll ausgegeben werden? Ein- und Ausgabe Wie werden aus den Eingabedaten die Ausgabedaten hergeleitet? Zerlegung in Teilprobleme Problemanalyse Formalisierung Randbedingungen Komplexität Software-Entwicklung für einfache Probleme T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 17 Software-Entwicklung: Programmentwurf Zerlegung in Einzelschritte Notation in Pseudo-Code als Ablaufdiagramm direkt in der Zielprogrammiersprache Datenstrukturen Programmentwurf Algorithmen Auswahl geeigneter Software-Entwicklung für einfache Probleme Roter Faden = Hauptprogramm für viele Teilprobleme gibt es bereits fertige Alg. + DS (siehe Vorlesung Diskrete Mathe) T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 18 Software-Entwicklung: Implementierung Software-Entwicklung für einfache Probleme Realisierung in einer konkreten Programmiersprache Auswahl geeigneter Datentypen Implementierung Berücksichtigung vorhandener Funktionsbibliotheken Schrittweise Umsetzung des Pseudo-Codes in der Ziel-Programmiersprache Dokumentation des Quelltextes nicht vergessen! T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 19 Software-Entwicklung: Testen Software-Entwicklung für einfache Probleme Korrektheit Terminierung Sicherung der Programmeigenschaften Falsche Ergebnisse Absturz (z.B. Durch Fehleingaben) typische Fehler Testen Endlossschleifen Testszenarien definieren Programm mit repräsentativen Eingabedaten starten und Ergebnisse überprüfen T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 20 Zerlegung in Einzelschritte in Pseudo-Code Was sind die Eingangsdaten? Was soll ausgegeben werden? Zerlegung in Teilprobleme Formalisierung Notation als Ablaufdiagramm direkt in der Zielprogrammiersprache Ein- und Ausgabe Datenstrukturen Programmentwurf Wie werden aus den Eingabedaten die Ausgabedaten hergeleitet? Problemanalyse Auswahl geeigneter Algorithmen für viele Teilprobleme gibt es bereits fertige Alg.+DS (siehe Vorlesung Diskrete Mathe) Roter Faden = Hauptprogramm Randbedingungen Komplexität Software-Entwicklung für einfache Probleme Korrektheit Terminierung falsche Ergebnisse Absturz (z.B. durch Fehleingaben) Endlossschleifen Sicherung der Programmeigenschaften typische Fehler Testen Testszenarien definieren Programm mit repräsentativen Eingabedaten starten und Ergebnisse überprüfen Implementierung Realisierung in einer konkreten Programmiersprache Auswahl geeigneter Datentypen Berücksichtigung vorhandener Funktionsbibliotheken Schrittweise Umsetzung des Pseudo-Codes in der Ziel-Programmiersprache erst ab hier erfolgt die Eingabe am Rechner Dokumentation des Quelltextes nicht vergessen T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 21 Übung im GIS-Labor • Schreiben Sie ein Programm, das die Summe der Zahlen von 1 bis n (n nist ein n ganzzahliger Wert) ( n 1) i berechnet. 2 i 1 • Hacker-Lösung: Schleife von 1 bis n und Aufsummieren der Zahlen • Einfache und elegantere Lösung: n Formalisierung: Wert i i 1 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 22 Übungsaufgabe Schreiben Sie ein Programm, das den Wert einer ganzzahligen Variablen w (0 bis 999) so als Text ausgibt, wie er ausgesprochen wird. Beispiele: w = 285 Ausgabe: "zweihundertfünfundachtzig" w = 513 Ausgabe: "fünfhundertdreizehn" T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 23