Kurs: Programmieren in Java
Kurs: Programmieren in Java
Kurs: Programmieren in Java
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Marco Block<br />
G R U N D L A G E N<br />
O B J E K T O R I E N T I E R T E<br />
P R O G R A M M I E R U N G<br />
<strong>Kurs</strong>: <strong>Programmieren</strong> <strong>in</strong> <strong>Java</strong><br />
Tag 1<br />
G R A F I K K O N Z E P T E<br />
B I L D V E R A R B E I T U N G<br />
M U S T E R E R K E N N U N G<br />
K I U N D S P I E L E -<br />
P R O G R A M M I E R U N G<br />
E N T W I C K L U N G S -<br />
U M G E B U N G E N<br />
Sommersemester 2009
Informationen zur Vorlesung<br />
Marco Block<br />
Vorlesungen:<br />
Mo-Fr 10-12 Uhr c.t.<br />
Sem<strong>in</strong>arraum SR006<br />
Fragen zur Veranstaltung an Marco Block, block@<strong>in</strong>f.fu-berl<strong>in</strong>.de<br />
Auf Literatur wird zu den Veranstaltungen verwiesen.<br />
Praktische Übungen:<br />
Mo-Fr 13-16 Uhr Miao Wang, mwang@<strong>in</strong>f.fu-berl<strong>in</strong>.de<br />
Johannes Kulick, kulick@<strong>in</strong>f.fu-berl<strong>in</strong>.de<br />
Benjam<strong>in</strong> Bortfeldt, bortfeld@<strong>in</strong>f.fu-berl<strong>in</strong>.de<br />
Tilman Walther, tilman@tilman.de<br />
Rechnerräume: K44 und K46<br />
Übungzettel gibt es nach Bedarf am Ende e<strong>in</strong>er Vorlesung.<br />
Folien und Beispielprogramme werden auf der Veranstaltungsseite zur Verfügung gestellt<br />
Dozententeam<br />
Sommersemester 2009
Informationen zur Vorlesung<br />
Mail<strong>in</strong>gliste:<br />
Forum:<br />
Marco Block<br />
- werden wir nicht brauchen<br />
- wichtige Änderungen oder Mitteilungen ersche<strong>in</strong>en im Forum<br />
http:// www.java-uni.de<br />
Das <strong>Java</strong>-Forum dient als Diskussionsplattform.<br />
- das virtuelle Tutorium => helft Euch gegenseitig!<br />
Veranstaltungswebseite:<br />
http://www.<strong>in</strong>f.fu-berl<strong>in</strong>.de/lehre/SS09/<strong>Java</strong>/<strong>in</strong>dex.html<br />
- Vorlesungsfolien, Übungszettel und Material zur Vorlesung<br />
- Literatur<br />
Bitte im Forum registrieren und anmelden …<br />
Sommersemester 2009
Inhalt:<br />
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
� Primitive und zusammengesetzte Datentypen<br />
� Methoden (Prozeduren und Funktionen)<br />
Block M.: "<strong>Java</strong>-Intensivkurs - In 14 Tagen lernen Projekte erfolgreich zu realisieren“, Spr<strong>in</strong>ger-Verlag 2007<br />
Marco Block<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Installation und Vorbereitung<br />
1. Download von der Sun-Seite und Installation (<strong>Java</strong> 1.6)<br />
http://java.sun.com/<br />
2. Entwicklungsumgebung für <strong>Java</strong><br />
• NotePad++ (http://notepad-plus.sourceforge.net/de/site.htm)<br />
• Eclipse, NetBeans, JCreator, JBuilder<br />
• (… es gibt e<strong>in</strong>e sehr große Auswahl)<br />
3. Testen des <strong>Java</strong>systems<br />
Marco Block<br />
• In der Konsole prüfen, ob der Compiler vorhanden ist<br />
c:\>javac<br />
• E<strong>in</strong> Testprogramm im Editor schreiben und mit dem Namen TestProgramm.java<br />
speichern<br />
public class TestProgramm{}<br />
• Compilieren und Ausführen des Testprogramms<br />
c:\>javac TestProgramm.java<br />
c:\>java TestProgramm<br />
verwenden wir am Anfang der Vorlesung<br />
TestProgramm.java<br />
TestProgramm.class<br />
Programm läuft<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und ihre Wertebereiche<br />
Wahrheitswerte<br />
boolean<br />
Zeichen, Symbole<br />
char<br />
Zahlen<br />
Marco Block<br />
byte, short, <strong>in</strong>t, long, float, double<br />
Datentyp Wertebereich BIT<br />
boolean true, false 8<br />
char 0 bis 65.535 16<br />
byte -128 bis 127 8<br />
short 32.768 bis 32.767 16<br />
<strong>in</strong>t -2.147.483.648 bis 2.147.483.647 32<br />
long -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 64<br />
float +/- 1,4E-45 bis +/- 3,4E+38 32<br />
double +/- 4,9E-324 bis +/-1,7E+308 64<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Variablen und Konstanten I<br />
Deklaration von Variablen:<br />
;<br />
Beispiel:<br />
boolean a;<br />
Zuweisung von Werten:<br />
= ;<br />
Beispiel:<br />
Marco Block<br />
<strong>in</strong>t b;<br />
b = 7;<br />
boolean a = true;<br />
char c, d, e;<br />
Sprechende Bezeichner verwenden:<br />
boolean istFertig;<br />
double kursWert;<br />
<strong>in</strong>t schrittZaehler;<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Variablen und Konstanten II<br />
Beschränkungen für Variablenbezeichnungen:<br />
Variablen beg<strong>in</strong>nen mit e<strong>in</strong>em Buchstaben, Unterstrich oder Dollarzeichen (nicht erlaubt s<strong>in</strong>d dabei Zahlen). Nach dem<br />
ersten Zeichen dürfen aber sowohl Buchstaben als auch Zahlen folgen. Operatoren und Schlüsselwörter dürfen nicht als<br />
Variablennamen verwendet werden.<br />
Reservierte Schlüsselwörter:<br />
abstract, assert, boolean, break, byte, case, catch, char, class, const, cont<strong>in</strong>ue, default, do, double, else, enum,<br />
extends, false, f<strong>in</strong>al, f<strong>in</strong>ally, float, for, future, generic, goto, if, implements, import, <strong>in</strong>ner, <strong>in</strong>stanceof, <strong>in</strong>t,<br />
<strong>in</strong>terface, long, native, new, null, operator, outer, package, private, protected, public, rest, return, short, static,<br />
strictfp, super, switch, synchronized, this, throw, throws, transient, true, try, var, void, volatile, while<br />
H<strong>in</strong>weis:<br />
<strong>Java</strong> ist textsensitiv, was bedeutet, dass auf Groß- und Kle<strong>in</strong>schreibung geachtet werden muss.<br />
Beispiel:<br />
Marco Block<br />
boolean istFertig;<br />
istFERTIG = true;<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Variablen und Konstanten III<br />
Konstanten:<br />
Variablen, die während des Progammablaufs unverändert bleiben sollen, deklariert man als Konstanten.<br />
Beispiel pi als Variable:<br />
double pi = 3.14159;<br />
Deklaration von Konstanten:<br />
f<strong>in</strong>al ;<br />
Beispiel PI als Konstante<br />
Marco Block<br />
f<strong>in</strong>al double PI = 3.14159;<br />
Konvention: Großbuchstaben verwenden,<br />
für bessere Lesbarkeit des Programms<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen I<br />
boolean:<br />
Bezeichnet e<strong>in</strong>en Wahrheitswert.<br />
boolean b;<br />
b = false;<br />
Das logische UND:<br />
Die Operation UND wird mit dem Symbol && geschrieben.<br />
Beispiel:<br />
Marco Block<br />
B1 B2 B1 UND B2<br />
0 0 0<br />
0 1 0<br />
1 0 0<br />
1 1 1<br />
boolean a, b, c;<br />
a = true;<br />
b = false;<br />
c = a && b;<br />
Welchen Wert trägt c?<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen II<br />
Das logische ODER:<br />
Die Operation ODER wird mit dem Symbol || geschrieben.<br />
Beispiel:<br />
Marco Block<br />
B1 B2 B1 ODER B2<br />
0 0 0<br />
0 1 1<br />
1 0 1<br />
1 1 1<br />
boolean a, b, c;<br />
a = true;<br />
b = a && a;<br />
c = b || a;<br />
Welchen Wert trägt c?<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen III<br />
Das logische NICHT:<br />
Die Operation NICHT wird mit dem Symbol ! geschrieben.<br />
Beispiel:<br />
Marco Block<br />
B1 NICHT B1<br />
0 1<br />
1 0<br />
boolean a=true, b=false, c, d;<br />
c = a && b;<br />
d = (a||b) && !c<br />
Welchen Wert trägt d?<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen IV<br />
char:<br />
Bezeichnet e<strong>in</strong> Zeichen oder Symbol.<br />
Relationale Operatoren (Vergleichsoperatoren):<br />
Marco Block<br />
char d =`7`;<br />
char e = `b`;<br />
Es existieren folgende Vergleichsoperatoren: == (gleich), != (ungleich), , =. Vergleichsoperatoren<br />
liefern e<strong>in</strong>en boolean.<br />
boolean d, e, f, g;<br />
char a, b, c;<br />
a = `1`;<br />
b = `1`;<br />
c = `5`;<br />
d = a == b;<br />
e = a != b;<br />
f = a < c;<br />
g = c >= b;<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen V<br />
<strong>in</strong>t.:<br />
Marco Block<br />
Der ganzzahlige Datentyp <strong>in</strong>t wird wahrsche<strong>in</strong>lich von allen am häufigsten verwendet.<br />
<strong>in</strong>t a, b = 0;<br />
a = 10;<br />
Wertebereich:<br />
{-2 31 , -2 31 +1, …, -1, 0, 1, 2, …, 2 31 -1}<br />
Der kle<strong>in</strong>ste und größte darstellbare Wert existiert als Konstante<br />
<strong>in</strong>t m<strong>in</strong>imalerWert = Integer.MIN_VALUE;<br />
<strong>in</strong>t maximalerWert = Integer.MAX_VALUE;<br />
Was passiert, wenn man diesen Wertebereich verlässt (Overflow)? Beispielsweise mit:<br />
2 31 -1+2 oder 2147483647+2 oder Integer.MAX_VALUE+2<br />
Wir erwarten als Ergebnis den Wert 2147483649 erhalten aber stattdessen -2147483647.<br />
Antwort: Der Wert landet wieder im <strong>in</strong>t-Bereich! Die <strong>in</strong>terne Darstellung ist zyklisch. Also aufpassen, e<strong>in</strong><br />
unerkannter Overflow könnte zu falschen Ergebnissen führen.<br />
byte, short, long s<strong>in</strong>d<br />
äquivalent zu verwenden<br />
Achtung Overflow!<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen V<br />
<strong>in</strong>t - Operationen:<br />
Marco Block<br />
Zahlen lassen sich z.B. addieren, subtrahieren, multiplizieren und dividieren. Es gibt aber zwei verschiedene<br />
Divisionen.<br />
a) Ganzahliges Teilen ohne Rest (DIV, symbolisiert durch ‚/‘)<br />
b) Den Rest aus der ganzzahligen Teilung ermitteln (MOD, symbolisiert durch ‚%‘)<br />
<strong>in</strong>t a = 29, b, c;<br />
b = a/10;<br />
c = a%10;<br />
<strong>in</strong>t d=0, e=1;<br />
d = d + e;<br />
e = e – 5;<br />
d = d + 1;<br />
Kurzschreibweise für Operationen:<br />
<strong>in</strong>t d=0, e=1;<br />
d += e;<br />
e –= 5;<br />
d += 1;<br />
d++;<br />
a=ganz * b + rest<br />
a/b = ganz<br />
a%b = rest<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen V<br />
float, double:<br />
Marco Block<br />
Repräsentieren gebrochene Zahlen oder Gleitkommazahlen.<br />
5. 4.3 .00000001 -2.87<br />
<strong>Java</strong> verwendet e<strong>in</strong>e wissenschaftliche Darstellung für Gleitkommazahlen, um längere Zahlen besser lesen zu können<br />
1E-8<br />
E steht für Exponent und die nachfolgende Dezimalzahl gibt an, um wieviele Stellen der Dezimalpunkt verschoben<br />
werden muss. Für unser Beispiel ergibt sich e<strong>in</strong>e Verschiebung nach l<strong>in</strong>ks um 8 Stellen, also:<br />
1E-8 = 1*10 -8 = 0.00000001.<br />
Double und float können nicht alle realen Werte annehmen und müssen deshalb als Näherungen verstanden werden.<br />
Beispielsweise wollen wir folgende Berechnung vornehmen:<br />
1/3 = 0.333333… (usw.)<br />
Als Typ double 1/3 = 0.3333333333333333<br />
Schauen wir uns die Darstellung e<strong>in</strong>es double genauer an:<br />
1.56E15<br />
E<strong>in</strong>en Teil kennen wir bereits, der Teil h<strong>in</strong>ter dem E ist der Exponent. Der Teil vor dem E ist die Mantisse. E<strong>in</strong>e Mantisse<br />
kann auf 16 Zeichen genau angegeben werden. E<strong>in</strong> Wert, z.B. 3.14159265358979324 wird gerundet zu<br />
3.141592653589793.<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Primitive Datentypen und Ihre Operationen V<br />
float, double - Operationen:<br />
Marco Block<br />
Die möglichen Operationen s<strong>in</strong>d die gleichen, wie sie bei <strong>in</strong>t vorgestellt wurden, lediglich die beiden<br />
Teilungsoperatoren verhalten sich anders.<br />
double a = 2;<br />
double b = 2.2;<br />
float c = 3;<br />
float d = 3.3f;<br />
float e, f;<br />
e = d%c;<br />
e = d/c;<br />
f = c*(d/2.4f)+1;<br />
f += 1.3f;<br />
e=3.3%3 liefert 0.29999995 statt 0.3<br />
(Rundungsfehler)<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Cast<strong>in</strong>g und Typumwandlungen I<br />
Zwei unterscheidbare Fälle:<br />
Marco Block<br />
Fall 1) Kle<strong>in</strong>er Datentyp wird <strong>in</strong> e<strong>in</strong>en größeren geschrieben.<br />
byte a = 28;<br />
<strong>in</strong>t b;<br />
b = a;<br />
float f = 2.3f;<br />
double d;<br />
d = f;<br />
Problemlos<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Cast<strong>in</strong>g und Typumwandlungen II<br />
Zwei unterscheidbare Fälle:<br />
Marco Block<br />
Fall 2) Großer Datentyp wird <strong>in</strong> e<strong>in</strong>en kle<strong>in</strong>eren geschrieben.<br />
float f;<br />
double d = 2.3;<br />
f = d;<br />
Datenverlust<br />
mögich!<br />
float f;<br />
double d = 2.3;<br />
f = (float)d; wir tragen das Risiko<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Cast<strong>in</strong>g und Typumwandlungen III<br />
Implizite Typumwandlungen:<br />
byte < short < <strong>in</strong>t < long<br />
float < double<br />
Datentypen s<strong>in</strong>d für Operation entscheidend:<br />
Marco Block<br />
<strong>in</strong>t a=5, b=7;<br />
double erg = a/b;<br />
System.out.pr<strong>in</strong>tln(“Ergebnis (double) von “+a+“/“+b+“ = “+erg);<br />
c:\>java Berechnung<br />
Ergebnis (double) von 5/7 = 0.0<br />
Der DIV-Operator für zwei <strong>in</strong>t-Werte liefert nur den ganzzahligen Wert ohne Rest zurück. Sollte e<strong>in</strong>er der beiden<br />
Operatoren e<strong>in</strong> double se<strong>in</strong>, so wird die Funktion ausgeführt, die auf mehrere Stellen nach dem Komma den richtigen<br />
Wert für die Division berechnet.<br />
<strong>in</strong>t a=5, b=7;<br />
double erg = (double)a/b;<br />
System.out.pr<strong>in</strong>tln(“Ergebnis (double) von “+a+“/“+b+“ = “+erg);<br />
c:\>java Berechnung<br />
Ergebnis (double) von 5/7 = 0.7142857142857143<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Methoden der Programmerstellung<br />
Marco Block<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Methoden der Programmerstellung I<br />
Marco Block<br />
1. Wasche die Birnen<br />
2. −> falls die Birnen noch nicht sauber s<strong>in</strong>d, gehe zu 1<br />
3. Halbiere die Birnen und entferne die Kerngehäuse<br />
4. Gare die Birnen mit wenig Wasser und Zitronensaft <strong>in</strong> e<strong>in</strong>em Topf<br />
5. wenn Variante 1 gewünscht gehe zu 6 ansonsten zu 13<br />
6. Variante 1:<br />
7. Zerdrücke den Schafskäse und verrühre ihn mit Sahne<br />
8. Würze die Käsemasse mit Salz und Paprika<br />
9. −> schmecke die Masse ab , falls Salz oder Paprika fehlen gehe zu 8<br />
10. Fülle die Käsemasse <strong>in</strong> die fertiggegarten Birnenhälften<br />
11. Garniere die Birnenhälften mit Kresse<br />
12. FERTIG<br />
13. Variante 2:<br />
14. Verrühre Roquefort mit Dosenmilch und etwas Kirschwasser<br />
15. Fülle die Masse <strong>in</strong> die fertiggegarten Birnenhälften<br />
16. Garniere alles mit Salatblättern, Kräutern oder Marasch<strong>in</strong>okirschen<br />
17. FERTIG<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Methoden der Programmerstellung II<br />
Sequentieller Ablauf<br />
Verzweigungen Mehrfachverzweigungen<br />
Sprünge<br />
Schleifen Mehrfachschleifen<br />
Parallelität<br />
Marco Block<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Methoden der Programmerstellung II<br />
Birnenrezept als Komb<strong>in</strong>ation<br />
1. Wasche die Birnen<br />
2. −> falls die Birnen noch nicht sauber s<strong>in</strong>d, gehe zu 1<br />
3. Halbiere die Birnen und entferne die Kerngehäuse<br />
4. Gare die Birnen mit wenig Wasser und Zitronensaft <strong>in</strong> e<strong>in</strong>em Topf<br />
5. wenn Variante 1 gewünscht gehe zu 6 ansonsten zu 13<br />
6. Variante 1:<br />
7. Zerdrücke den Schafskäse und verrühre ihn mit Sahne<br />
8. Würze die Käsemasse mit Salz und Paprika<br />
9. −> schmecke die Masse ab , falls Salz oder Paprika fehlen gehe zu 8<br />
10. Fülle die Käsemasse <strong>in</strong> die fertiggegarten Birnenhälften<br />
11. Garniere die Birnenhälften mit Kresse<br />
12. FERTIG<br />
13. Variante 2:<br />
14. Verrühre Roquefort mit Dosenmilch und etwas Kirschwasser<br />
15. Fülle die Masse <strong>in</strong> die fertiggegarten Birnenhälften<br />
16. Garniere alles mit Salatblättern, Kräutern oder Marasch<strong>in</strong>okirschen<br />
17. FERTIG<br />
Marco Block<br />
Sommersemester 2009
E<strong>in</strong>stieg <strong>in</strong> die Programmierung mit <strong>Java</strong><br />
Programme <strong>in</strong> <strong>Java</strong><br />
E<strong>in</strong>faches Programm ProgrammE<strong>in</strong>s.java<br />
Marco Block<br />
public class ProgramE<strong>in</strong>s{<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
System.out.pr<strong>in</strong>tln(„Endlich ist es soweit! Me<strong>in</strong> erstes Programm<br />
läuft…“);<br />
}<br />
}<br />
c:\>javac ProgrammE<strong>in</strong>s.java<br />
c:\>java ProgrammE<strong>in</strong>s<br />
Endlich ist es soweit! Me<strong>in</strong> erstes Programm lõuft...<br />
Probleme mit deutschem<br />
Zeichensatz<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Inhalt:<br />
Marco Block<br />
� Programme <strong>in</strong> <strong>Java</strong><br />
� Kommentare<br />
�� Sequentielle Anweisungen<br />
� Verzweigungen<br />
� Schleifentypen<br />
� Sprunganweisungen<br />
� Funktionen <strong>in</strong> <strong>Java</strong><br />
Block M.: "<strong>Java</strong>-Intensivkurs - In 14 Tagen lernen Projekte erfolgreich zu realisieren" , Spr<strong>in</strong>ger-Verlag 2007<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Programm als Klasse<br />
Jedes Programm sehen wir erstmal als e<strong>in</strong>e Klasse an. Me<strong>in</strong>ErstesProgramm zeigt das Gerüst für e<strong>in</strong><br />
Programm <strong>in</strong> <strong>Java</strong>.<br />
Marco Block<br />
Name des Programms mit Großbuchstaben<br />
public class Me<strong>in</strong>ErstesProgramm{<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
//HIER KOMMEN DIE ANWEISUNGEN DES PROGRAMMS HIN<br />
}<br />
}<br />
An diese Stelle schreiben<br />
wir das Programm.<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Kommentare<br />
Verschiedene Möglichkeiten, um Programme zu kommentieren.<br />
// Ich b<strong>in</strong> e<strong>in</strong> hilfreicher Kommentar <strong>in</strong> e<strong>in</strong>er Zeile<br />
/* Falls ich mal Kommentare über mehrere Zeilen<br />
h<strong>in</strong>weg schreiben möchte, so kann ich das<br />
mit diesem Kommentarsymbol tun<br />
*/<br />
public class Kommentierung{ // ich kann auch hier stehen<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
}<br />
Marco Block<br />
}<br />
/* An diese Stelle schreiben wir die<br />
Programmanweisungen */<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Sequentielle Anweisungen<br />
Programm Sequentiell.java mit sequentiellen Anweisungen<br />
Marco Block<br />
public class Sequentiell{<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
<strong>in</strong>t a=5; // Anweisung 1<br />
a=a*2; // Anweisung 2<br />
a=a+10; // Anweisung 3<br />
a=a-5; // Anweisung 4<br />
}<br />
}<br />
Nach e<strong>in</strong>er Anweisung steht<br />
e<strong>in</strong> „;“.<br />
Sequentielle Anweisungen werden der Reihenfolge nach von oben nach unten verarbeitet.<br />
a 5<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Sequentielle Anweisungen<br />
Ausgabe am Ende der Berechnung zur Überprüfung.<br />
public class Sequentiell{<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
<strong>in</strong>t a=5; // Anweisung 1<br />
a=a*2; // Anweisung 2<br />
a=a+10; // Anweisung 3<br />
a=a-5; // Anweisung 4<br />
}<br />
Marco Block<br />
}<br />
System.out.pr<strong>in</strong>tln("a hat den Wert: "+a);<br />
C:\>javac Sequentiell.java<br />
C:\>java Sequentiell<br />
a hat den Wert: 15<br />
Anweisung zur Ausgabe im Konsolenfenster<br />
Nach Ausführung des Programms erhalten wir folgende Ausgabe:<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verzweigungen<br />
Wenn e<strong>in</strong>e Bed<strong>in</strong>gung erfüllt ist, dann führe e<strong>in</strong>e e<strong>in</strong>zelne Anweisung aus:<br />
if () ;<br />
if (x
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verzweigungen II<br />
if-Verzweigungen lassen sich verschachteln:<br />
if ()<br />
;<br />
else if ()<br />
;<br />
else if ()<br />
;<br />
else ;<br />
Mehrfachverzweigungen lassen sich mit switch realisieren<br />
Marco Block<br />
switch () {<br />
case :<br />
;<br />
break;<br />
}<br />
case :<br />
;<br />
break;<br />
default:<br />
;<br />
Beschränkungen für Bed<strong>in</strong>gungen z.B. „a==4“.<br />
Im Ausdruck lassen sich nur primitive Datentypen<br />
(char, bytem short, <strong>in</strong>t) auf Inhalt überprüfen.<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verzweigungen III<br />
Beispiel für switch-Verzweigung:<br />
for (<strong>in</strong>t i=0; ijava Verzweigung<br />
0<br />
1 oder 2<br />
1 oder 2<br />
3<br />
hier landen alle anderen...<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verschiedene Schleifentypen<br />
Warum Schleifen?<br />
System.out.pr<strong>in</strong>tln("1 zum Quadrat ist "+(1*1));<br />
System.out.pr<strong>in</strong>tln("2 zum Quadrat ist "+(2*2));<br />
System.out.pr<strong>in</strong>tln("3 zum Quadrat ist "+(3*3));<br />
System.out.pr<strong>in</strong>tln("4 zum Quadrat ist "+(4*4));<br />
System.out.pr<strong>in</strong>tln("5 zum Quadrat ist "+(5*5));<br />
System.out.pr<strong>in</strong>tln("6 zum Quadrat ist "+(6*6));<br />
E<strong>in</strong>e for-Schleife <strong>in</strong>itialisiert zu Beg<strong>in</strong>n e<strong>in</strong>e Variable und führt den folgenden Anweisungsblock solange<br />
aus, erhöht oder verr<strong>in</strong>gert dabei die Schleifenvariable, bis die Bed<strong>in</strong>gung nicht mehr erfüllt ist:<br />
Marco Block<br />
for (; ; )<br />
;<br />
Ausgabe der quadrierten Werte:<br />
for (<strong>in</strong>t i=1; i
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verschiedene Schleifentypen II<br />
Beispiel 1:<br />
for (<strong>in</strong>t i=0; i=-11; i=i-3){<br />
System.out.pr<strong>in</strong>tln("Aktueller Wert für i ist "+i);<br />
}<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verschiedene Schleifentypen III<br />
While-Schleifen, wenn nicht bekannt ist, wieviele Durchläufe benötigt werden. Führe die Anweisungen<br />
solange aus, wie die Bed<strong>in</strong>gung wahr ist:<br />
while ()<br />
;<br />
Beispiel: Ausgabe der quadrierten Werte mit Hilfe der while-Schleife:<br />
Marco Block<br />
<strong>in</strong>t i=1;<br />
while (i
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verschiedene Schleifentypen IV<br />
Do-While-Schleifen, wenn die Anweisungen m<strong>in</strong>destens e<strong>in</strong>mal ausgeführt werden sollen.<br />
do {<br />
;<br />
} while () ;<br />
Beispiel für den E<strong>in</strong>satz der do-while-Schleife:<br />
Marco Block<br />
<strong>in</strong>t i=0;<br />
do{<br />
i++;<br />
System.out.pr<strong>in</strong>tln("Wert von i: "+i);<br />
} while (ijava Schleifen<br />
Wert von i: 1<br />
Wert von i: 2<br />
Wert von i: 3<br />
Wert von i: 4<br />
Wert von i: 5<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Verschiedene Schleifentypen V<br />
Wenn wir die Bed<strong>in</strong>gung so ändern, dass sie von vornhere<strong>in</strong> nicht erfüllt ist<br />
<strong>in</strong>t i=0;<br />
do {<br />
i++;<br />
System.out.pr<strong>in</strong>tln("Wert von i: "+i);<br />
} while (ijava Schleifen<br />
Wert von i: 1<br />
Das war auch zu erwarten, da die Überprüfung der Bed<strong>in</strong>gung erst nach der ersten Ausführung<br />
stattf<strong>in</strong>det.<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Sprunganweisungen I<br />
Mit break können wir Schleifen beenden.<br />
<strong>in</strong>t wert;<br />
for (<strong>in</strong>t i=0; i100)<br />
break;<br />
}<br />
Als Ausgabe erhalten wir:<br />
Marco Block<br />
C:\<strong>Java</strong>>java Spruenge<br />
Wert i=0, Funktionswert von i=2<br />
Wert i=1, Funktionswert von i=3<br />
Wert i=2, Funktionswert von i=6<br />
Wert i=3, Funktionswert von i=11<br />
Wert i=4, Funktionswert von i=18<br />
Wert i=5, Funktionswert von i=27<br />
Wert i=6, Funktionswert von i=38<br />
Wert i=7, Funktionswert von i=51<br />
Wert i=8, Funktionswert von i=66<br />
Wert i=9, Funktionswert von i=83<br />
Wert i=10, Funktionswert von i=102<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Sprunganweisungen II<br />
In Programmen lassen sich Marken unterbr<strong>in</strong>gen, die es ermöglichen auch aus mehreren Schleifen<br />
herauszuspr<strong>in</strong>gen.<br />
:<br />
mit break können wir an diese Stelle spr<strong>in</strong>gen.<br />
Marco Block<br />
SprungZuI: // Sprungmarke<br />
for (<strong>in</strong>t i=0; i
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Sprunganweisungen III<br />
Als Ausgabe erhalten wir:<br />
C:\<strong>Java</strong>>java Spruenge<br />
... jetzt s<strong>in</strong>d wir hier bei i<br />
... jetzt s<strong>in</strong>d wir hier bei j<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
hier s<strong>in</strong>d wir...<br />
Jetzt ändern wir das Programm so, dass wir zu der Sprungmarke SprungZuJ spr<strong>in</strong>gen.<br />
Marco Block<br />
C:\<strong>Java</strong>>java Spruenge<br />
... jetzt s<strong>in</strong>d wir hier bei i<br />
... jetzt s<strong>in</strong>d wir hier bei j<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
... jetzt s<strong>in</strong>d wir hier bei i<br />
... jetzt s<strong>in</strong>d wir hier bei j<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
... jetzt s<strong>in</strong>d wir hier bei i<br />
... jetzt s<strong>in</strong>d wir hier bei j<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
... jetzt s<strong>in</strong>d wir hier bei k<br />
hier s<strong>in</strong>d wir...<br />
Aufgabe: versucht dieses Beispiel eigenständig<br />
nachzuvollziehen...<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Sprunganweisungen IV<br />
Die Anweisung cont<strong>in</strong>ue beendet nicht die aktuelle <strong>in</strong>nere Schleife wie , sondern spr<strong>in</strong>gt zum Start der<br />
Schleife zurück, verändert entsprechend die Variable um die angegebene Schrittweite und setzt die<br />
Arbeit fort.<br />
Beispiel:<br />
Marco Block<br />
public class Sprunganweisungen{<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
for (<strong>in</strong>t i=0; i
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Sprunganweisungen IV<br />
Als Ausgabe erhalten wir:<br />
Marco Block<br />
C:\<strong>Java</strong>>java Sprunganweisungen<br />
Schleife i=0, Code 1<br />
Schleife j=0, Code 1<br />
Schleife j=0, Code 2<br />
Schleife j=1, Code 1<br />
cont<strong>in</strong>ue-Anweisung<br />
Schleife j=2, Code 1<br />
Schleife j=2, Code 2<br />
Schleife i=0, Code 2<br />
Schleife i=1, Code 1<br />
Schleife j=0, Code 1<br />
Schleife j=0, Code 2<br />
Schleife j=1, Code 1<br />
cont<strong>in</strong>ue-Anweisung<br />
Schleife j=2, Code 1<br />
Schleife j=2, Code 2<br />
cont<strong>in</strong>ue-Anweisung<br />
Schleife i=2, Code 1<br />
Schleife j=0, Code 1<br />
Schleife j=0, Code 2<br />
Schleife j=1, Code 1<br />
cont<strong>in</strong>ue-Anweisung<br />
Schleife j=2, Code 1<br />
Schleife j=2, Code 2<br />
Schleife i=2, Code 2<br />
Auch die Anweisung cont<strong>in</strong>ue lässt sich mit e<strong>in</strong>er Sprungmarke versehen.<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Funktionen <strong>in</strong> <strong>Java</strong> (Motivation) I<br />
Angenommen wir haben e<strong>in</strong>e schöne Ausgabe für Zahlen programmiert und möchten nach jedem<br />
Berechnungsschritt diese Ausgabe ausführen. Momentan würden wir es noch so schreiben:<br />
// Ausgabe.java<br />
public class Ausgabe{<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
<strong>in</strong>t a=4;<br />
}<br />
Marco Block<br />
}<br />
System.out.pr<strong>in</strong>tln();<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln("*** Wert der Variable a ist "+a);<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln();<br />
a=(a*13)%12;<br />
System.out.pr<strong>in</strong>tln();<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln("*** Wert der Variable a ist "+a);<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln();<br />
a+=1000;<br />
System.out.pr<strong>in</strong>tln();<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln("*** Wert der Variable a ist "+a);<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln();<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Funktionen <strong>in</strong> <strong>Java</strong> (Motivation) I<br />
Um Redundanz zu vermeiden lagern wir diese Zeilen <strong>in</strong> e<strong>in</strong>e Funktion aus. Aus der Mathematik wissen<br />
wir, dass Funktionen auch e<strong>in</strong> Ergebnis liefern. Falls, wie <strong>in</strong> unserem Fall, ke<strong>in</strong> Rückgabewert existiert,<br />
dann schreiben wir als Rückgabewert das Schlüsselwort void.<br />
public static Funktionsname (Parameter) {<br />
// Funktionskörper<br />
}<br />
Beispiel:<br />
Marco Block<br />
public class AusgabeFunktion{<br />
public static void gebeAus(<strong>in</strong>t a){ // neue Funktion<br />
System.out.pr<strong>in</strong>tln();<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln("*** Wert der Variable a ist "+a);<br />
System.out.pr<strong>in</strong>tln("*******************************************");<br />
System.out.pr<strong>in</strong>tln();<br />
}<br />
}<br />
// ma<strong>in</strong>-Funktion<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args){<br />
<strong>in</strong>t a=4;<br />
gebeAus(a);<br />
a=(a*13)%12;<br />
gebeAus(a);<br />
a+=1000;<br />
gebeAus(a);<br />
}<br />
Sommersemester 2009
<strong>Programmieren</strong> mit e<strong>in</strong>em e<strong>in</strong>fachen Klassenkonzept<br />
Vielen Dank fürs Zuhören!<br />
Das genügt erstmal für heute ...<br />
Block M.: "<strong>Java</strong>-Intensivkurs - In 14 Tagen lernen Projekte erfolgreich zu realisieren“, Spr<strong>in</strong>ger-Verlag 2007<br />
Marco Block<br />
Sommersemester 2009