26.01.2013 Aufrufe

Kurs: Programmieren in Java

Kurs: Programmieren in Java

Kurs: Programmieren in Java

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!