36
Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich Boles

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Embed Size (px)

Citation preview

Page 1: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1

Programmierkurs Java

Vorlesung

am FB Informatik

der Universität Oldenburg

Vorlesung 4

Dietrich Boles

Page 2: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 2

Gliederung von Vorlesung 4

• Java-Grundlagen

– Java-Programme

– Zeichensätze

– Kommentare

– Token

– Schlüsselwörter

– Bezeichner

• Variablen

– Motivation

– Datentypen

– Initialisierung

• Ausdrücke

– Motivation

– Definition

– Operatoren

• Erweiterung des Hamster-Modells

Page 3: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 3

Grundlagen / Java-Programme

Erstellen und Ausführen:(1)Eingeben eines Programms

(2)Compilieren (javac) evtl. Syntaxfehler beseitigen!

(3)Ausführen (java)

Beispiel:(1)Datei „World.java“ :

(2)javac World.java

(3)java World

import java.io.*;

public class World { public static void main(String[] args) { try { System.out.println(„Hello world!“); } catch (Exception e) { System.out.println(„Fehler!“);} } }

„to-do“-Code

Page 4: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 4

Grundlagen / Zeichensätze

• Java zugrundeliegender Zeichensatz: Unicode

• 16-Bit-Zeichensatz (216 Zeichen)

• ersten 256 Zeichen: Latin-1

• ersten 128 Zeichen: ASCII (7-Bit-Zeichensatz)

• Escape-Sequenz \udddd als (Ersatz-)Darstellung von Unicode-Zeichen;

d ist hexadezimale Ziffer (0-9 und a-f)

• gültiger Bezeichner: ab\u4711\u8a9fcd

Bitte nur ASCII-Zeichen verwenden !!!!!!!!!!!!!

Page 5: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 5

Grundlagen / Kommentare

Zeilenkommentar:

// Kommentar

Bereichskommentar:

/* Kommentar */

import java.io.*;

// gibt „Hello world!“ auspublic class World { public static void main(String[] args) { try { /* Ausgabe- befehl */ System.out.println(„Hello world!“); } catch (Exception e) { System.out.println(„Fehler!“);} } }

Dokumentationskommentar:

/** Kommentar */

Keine Schachtelung möglich!

Page 6: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 6

Grundlagen / Token

• Token: lexikalische Einheiten– Symbole: <, =, <=, ...– Schlüsselwörter: while, if, ...– Bezeichner: Prozedurnamen, Klassennamen, ...– Literale: true, 23, 24.5f, „hello

world“, ...

• Trennung von Token:– Leerzeichen (Blank)

– Tabulator

– Zeilenende

– Zeilenvorschub

– Seitenvorschub

• „gefräßiger“ Tokenizer: Zusammenfassung möglichst vieler Zeichen

Page 7: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 7

Grundlagen / Schlüsselwörter

abstractbooleanbreakbytecasecatchcharclassconstcontinuedefaultdo

doubleelseextendsfinalfinallyfloatforgotoifimplementsimportinstanceof

intinterfacelongnativenewnullpackageprivateprotectedpublicreturnshort

staticsuperswitchsynchronizedthisthrowthrowstransienttryvoidvolatilewhile

Page 8: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 8

Grundlagen / Bezeichner

• Benennung von deklarierten Einheiten und Labeln:– Klassennamen

– Variablennamen

– Prozedurnamen

– ...

• Beginn mit Buchstabe, Unterstrich oder Dollar

• anschließend: Buchstaben, Ziffern, Unterstrich, Dollar, Unicode-Zeichen

• Grundlage: Unicode-Zeichensatz– Katze– Kätzchen– a asasas

Bitte nur ASCII-Zeichen verwenden!

Page 9: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 9

Variablen und Ausdrücke / Motivation• Motivation:

Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat.

• Notwendige Voraussetzungen:– Gedächtnis ( Speicher)

– Zählen/Rechnen/Vergleichen ( Operationen)

• Programm:*1:„gefundene Anzahl ist 0“;while (vornFrei()) { vor(); while (kornDa()) { nimm(); *2:„erhöhe gefundene Anzahl um 1“; }}while ( *3:„gefundene Anzahl größer als 0 ist“ ) { gib(); *4:„erniedrige gefundene Anzahl um 1“;}

Page 10: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 10

Variablen / Definition

• Notwendig für *1:– Reservierung von Speicherplatz ( Variablendefinition)– Festlegung eines Namens ( Variablendeklaration)– Festlegung des Typs ( Datentypen)– Initialisierung– hier: int anzahl = 0;

• Variablendeklaration/-definition:– Deklaration: Bekanntgabe eines Namens für den Speicherbereich an den Compiler– Definition: Reservierung von Platz im Hauptspeicher

Programm

Daten

Hauptspeicher

„Gedächtnis“

Page 11: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 11

Variablen / Definition

<Variablendefinition> ::= <Datentyp> <Bezeichner> [„=“ <Ausdruck>] {„,“ <Bezeichner> [„=“ <Ausdruck>]} „;“

int anzahl = 0;long grosse_zahl = 1234567891234567L;

float pi = 3.1415F;float noch_eine;

char eins = `1`, zwei = `2`, drei = `3`;char neue_zeile = `\n`;

String hello = „hello world!“;

boolean wahr = true;

int = 4711;

Page 12: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 12

Variablen / Datentypen

• Daten haben unterschiedliche Eigenschaften:– Ganze Zahlen: 2, 4711, -45, ...

– Reelle Zahlen: -3.4, -56.789678, -3.4e-10, 45.567e123, ...

– Buchstaben: `a`, `b`, ...

– Zeichenketten: „hello world!“, ...

– ...

– Unsinn: 3 + „hello“

• Unterschiedliche Daten benötigen unterschiedlich viel Platz– boolesche Werte: 1 Bit

– ASCII-Zeichen: 7 Bit

– ...

• Motivation für Datentypen:– Überprüfung „sinnvoller“ Operationen

– Reservierung von „passendem“ Speicherplatz

Page 13: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 13

Variablen / Datentypen

Einfache Datentypen in Java:

boolean entweder true oder false

char 16-Bit-Unicode

byte 8-Bit-Integer, vorzeichenbehaftetes 2er-Komplement

short 16-Bit-Integer, vorzeichenbehaftetes 2er-Komplement

int 32-Bit-Integer, vorzeichenbehaftetes 2er-Komplement

long 64-Bit-Integer, vorzeichenbehaftetes 2er-Komplement

float 32-Bit-Gleitkommazahl (IEEE 754-1985)

double 64-Bit-Gleitkommazahl (IEEE 754-1985)

Wertebereiche beschränkt: int: [-231 ... 231-1]

int i = 2147483647;

i = i + 1;

i: -2147483648

Page 14: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 14

Variablen / Datentypen

boolean false N.A. N.A.

char `\u0000` \u0000 \uFFFF

byte 0 -128 127

short 0 -32768 32767

int 0 -2147483648 2147483647

long 0L -9223372036854775808

9223372036854775807

float 0.0F +-3.40282347E+38

+-1.40239846E-45

double 0.0 +-1.79769313486231570E+308

+-4.94065645841246544E-324

Default KleinsterWert

GrößterWert

Page 15: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 15

Variablen / Initialisierung

• Initialisierung von Variablen– implizit durch Default-Werte

– explizit mit Hilfe von Literalen bzw. Ausdrücken

– Empfehlung: Variablen immer explizit initialisieren!

• Literale: Typspezifische Konstanten

• boolean:true, false

• int:

Zeichenketten aus – oktalen (führende 0): 035– dezimalen 29– hexadezimalen Ziffern (führendes 0x): 0x1D

Page 16: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 16

Variablen / Initialisierung

• long:

int-Literal mit nachgestelltem l oder L: 29L 4321l• double:

Dezimalzahlen mit Dezimalpunkt und optionalem Exponent:

18. 1.8e1 .18E-2• float:

double-Literal mit nachgestelltem f oder F:

18.0f 1.8e1F• char:

Zeichen zwischen zwei Apostrophen: `a` `A` `2`

oder Sonderzeichen mit Escape-Sequenz: `\n` `\“` `\\`• Strings:

Zeichen zwischen zwei Anführungszeichen: „hello\n world“

Page 17: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 17

Ausdrücke / Motivation

• Notwendig für *2 , *3 und *4:– Operationen ( Mathematik)– Operatoren– Operanden

• Sinn und Zweck: Berechnung neuer Werte aus alten Werten

• Beispiel:

int anzahl = 0;

anzahl = anzahl + 1;

Operator

OperandOperand

Page 18: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 18

Ausdrücke / Definition

<Ausdruck> ::= <Literal> | <Variablenname> | <Funktionsaufruf> | „(“ <Ausdruck> „)“ | <unär-Op> <Ausdruck> | <Ausdruck> <binär-Op> <Ausdruck> | <Ausdruck> <ternär-Op1> <Ausdruck> <ternär-Op2> <Ausdruck>

Ausdruck: – Verarbeitungsvorschrift, deren Ausführung einen Wert eines bestimmten

Typs liefert

– entsteht, indem Operanden mit Operatoren verknüpft werden

– Operanden müssen typkonform sein!

Page 19: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 19

Ausdrücke / Operatoren / Übersicht

• Integer-Arithmetik (int, short, long): +, -, *, /, %

• Gleitkomma-Arithmetik (float, double): +, -, *, /

• Boolesche Arithmetik (boolean): &&, ||, !

• Vergleichsoperatoren: ==, !=, <, >, <=, >=

• Zuweisungsoperatoren: =, +=, -=, *=, /=, %=

• Inkrement-Operator: ++

• Dekrement-Operator: --

• Bit-Operatoren: <<, >>>, &, |, ~, ^, ...

• Spezielle Operatoren: ?:, (type)

Page 20: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 20

Ausdrücke / Operatoren / integer-Arithmetik

+: positives Vorzeichen +9876

-: negatives Vorzeichen -2345

+: Addition 12 + 98 (= 110)

-: Subtraktion 12 - 98 (= -86)

*: Multiplikation 6 * 5 (= 30)

/: Ganzzahl-Division 7 / 3 (= 2)

%: Restbildung (modulo) 7 % 3 (= 1)

• Operanden vom Typ int, short oder long• gelieferter Wert vom Typ int, short bzw. long

Page 21: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 21

Ausdrücke / Operatoren / Gleitkomma-Arithmetik

+: positives Vorzeichen +45.67e3

-: negatives Vorzeichen -3.4e-5

+: Addition 1.2 + 9.8 (= 11.0)

-: Subtraktion 1.2 - 9.8 (= -8.6)

*: Multiplikation 6.1 * 5.0 (= 30.5)

/: Ganzzahl-Division 9.0 / 2.0 (= 4.5)

• Operanden vom Typ float oder double• gelieferter Wert vom Typ float oder double

Rundungsfehler möglich!

Page 22: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 22

Ausdrücke / Operatoren / boolesche Arithmetik

&&: Konjunktion true && false (= false)

||: Disjunktion true || false (= true)

!: Negation !true (= false)

• Operanden vom Typ boolean• gelieferter Wert vom Typ boolean

Page 23: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 23

Ausdrücke / Operatoren / Vergleiche

==: Gleichheit 4 == 5 (= false)

!=: Ungleichheit 6 != 7 (= true)

<: Kleiner -2. < 0.1 (= true)

<=: Kleiner-Gleich 3 <= 3 (= true)

>: Größer `a` > `b` (= false)

>=: Größer-Gleich 1 >= -1 (= true)

• Operanden vom Typ int, short , long,float, double oder char• gelieferter Wert vom Typ boolean

Page 24: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 24

Ausdrücke / Operatoren / Zuweisung

• Operanden von beliebigem Typ• gelieferter Wert vom Typ der Operanden

<Zuweisung> ::= <Variablenname> „=“ <Ausdruck> „;“

int i = 0, j = -34; // Initialisierungi = 45; // Zuweisungi = i + 3;j = i = j + i*3;

• Abkürzungen:

i++ i = i+1;i-- i = i-1;i += <expr> i = i + (<expr>)i -= <expr> i = i - (<expr>)i *= <expr> i = i * (<expr>)i /= <expr> i = i / (<expr>)i %= <expr> i = i % (<expr>)

Page 25: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 25

Ausdrücke / Operatoren / Bedingungsoperator

• ternärer Operator• erster Operand vom Typ boolean• Operanden zwei und drei typkonform

int i = 45, j = 46;

int k = i<j ? i-1 : j+2;

int k = 0; if (i<j) k = i-1; else k = j+2;

Page 26: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 26

Ausdrücke / Operatoren / Typumwandlungen

• einige Typumwandlungen implizit:– short int long– float double– arithmetisch Gleitkomma– char int

short s = 3;int i = s;long l = i = s;

float f = 3.4F;double d = f * 2.3;

float g = 3 + i;

int b = `a`;´z` - `a`

ASCII-Repräsentation

Page 27: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 27

Ausdrücke / Operatoren / Typumwandlungen

• Explizite Typumwandlung (Typcast):

<Cast> ::= „(“ <Typ> „)“

double d = 7.99;

int i = (int) d; // i == 7

int zahl = 33000;

short s = (short)zahl; // Abschneiden der oberen Bits

// s == -32536

• Nicht alle Typumwandlungen sind erlaubt:

int wahr = (int)true; // Fehler!!!

Page 28: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 28

Ausdrücke / Operatoren / Präzedenz

• Postfix-Operatoren [], ., ++, --

• unäre Operatoren +, -, ~, !

• Erzeugung / Typumwandlung new, (type)

• Multiplikationsoperatoren *, /, %

• Additionsoperatoren +, -

• Gleichheitsoperatoren ==, !=

• logische Und &&

• logisches Oder ||

• Bedingungsoperator ?:

• Zuweisungsoperatoren =, +=, *=, ...

Abänderung der Präzedenz durch Klammernsetzung möglich!

Liste mit absteigender Präzedenz:

Page 29: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 29

Ausdrücke / Operatoren / Assoziativität

• wichtig bei Operatoren gleicher Präzedenz

• alle unären Operatoren sind rechts-assoziativ

• alle binären Operatoren außer den Zuweisungsoperatoren sind links-assoziativ

• Zuweisungsoperatoren sind rechts-assoziativ

• der ternäre Bedingungsoperator (?:) ist rechts-assoziativ

• Assoziativität ist von Bedeutung bei Funktionen mit Seiteneffekten!

i = j *= k + 78; i = (j *= (k + 78));

i = j * k / 5; i = (j * k) / 5;

Page 30: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 30

Ausdrücke / Operatoren / Auswertungsreihenfolge

• Operanden werden immer von links nach rechts ausgewertet werden

• wichtig bei Seiteneffekten!

• jeder Operand wird vor der Ausführung des Operators ausgewertet;

Ausnahmen: &&, || und ?:

p && q p ? q : false

p || q p ? true : q

o1 ? o2 : o3 werte o1 aus; falls true, werte o2 ansonsten o3 aus

Page 31: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 31

Variablen und Ausdrücke / Zusammenfassung

• Motivation:Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat.

• Programm:

int anzahl = 0;while (vornFrei()) { vor(); while (kornDa()) { nimm(); anzahl = anzahl + 1; }}while ( anzahl > 0 ) { gib(); anzahl = anzahl -1;}

Page 32: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 32

Beispiele / Fakultät

import java.io.*;

public class Fakultaet {

public static void main (String[] args) { int fak = 1; int n = 7; int zaehler = 1; while (zaehler <= n) { fak = fak * zaehler; zaehler = zaehler + 1; } System.out.println(fak); }}

fak:n:

zaehler:

Page 33: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 33

Variablen und Ausdrücke / Beispiel

import java.io.*;

public class Fibonacci {

public static void main (String[] args) { int lo = 1; int hi = 1; System.out.println(lo); while (hi < 20) { System.out.println(hi); hi = lo + hi; // neues hi lo = hi - lo; // neues lo (= altes hi) } }}

lo:hi:

Page 34: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 34

Erweiterung des Hamster-Modells

• Variablendefinition (int anzahl = 0;)– neue Anweisung (lokale Variable)

– neue Definition (globale Variable)

• Zuweisung(en) (anzahl = 3;)• arithmetische Ausdrücke (anzahl = anzahl + 1;)• Erweiterung der booleschen Ausdrücke (anzahl > 0)

• Achtung:– Der Gültigkeitsbereich einer Variablen beschränkt sich auf den Block, in dem die

Variable definiert wurde!

– Im Falle einer Variablendefinition als Anweisung beginnt der Gültigkeitsbereich ab der Stelle der Definition!

– In dem Gültigkeitsbereich einer Variablen darf keine Variable gleichen Namens definiert werden!

Page 35: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 35

Erweiterung des Hamster-Modells

• Aufgabe:Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat.

• Korrektes Programm mit globaler Variable anzahl:

int anzahl = 0;

void main() { sammle(); while (vornFrei()) { vor(); sammle(); } legeAb();}

void sammle() { while (kornDa()) { nimm(); anzahl = anzahl + 1; }}

void legeAb() { while (anzahl > 0) { gib(); anzahl = anzahl - 1; }}

Page 36: Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 1 Programmierkurs Java Vorlesung am FB Informatik der Universität Oldenburg Vorlesung 4 Dietrich

Programmierkurs Java Vorlesung 4 Dietrich Boles Seite 36

Erweiterung des Hamster-Modells

• Aufgabe:Der Hamster soll bis zur nächsten Wand laufen, dabei alle Körner einsammeln, die er findet, und an der Wand genauso viele Körner ablegen, wie er eingesammelt hat.

• Fehlerhaftes Programm mit zwei lokalen Variablen anzahl:

void main() { sammle(); while (vornFrei()) { vor(); sammle(); } legeAb();}

void sammle() { int anzahl = 0; while (kornDa()) { nimm(); anzahl = anzahl + 1;} }

void legeAb() { int anzahl; while (anzahl > 0) { gib(); anzahl = anzahl - 1;} }