Beruflich Dokumente
Kultur Dokumente
Prozedurale Elemente
Inhalt
Ziele
Variablen deklarieren und verändern können
Mit Operatoren und Ausdrücke umgehen können
Programmabläufe bedingt ausführen können
Programmteile wiederholt ausführen lassen
Datentypen in Java
Datentypen
Ganzzahl Kommazahl
Einschub: EBNF
boolean Datentyp
Beispiele
true, false
Gegenbeispiele
1, True falsch!
Wird verwendet, um Wahrheitswerte zu repräsentieren
Ergebnis von ‚ist 5 > 7?‘ ->false
Ganzzahlige Datentypen
Beispiele
4, -15, 0, +12345L
Gegenbeispiele
+-3, 12 34, 12a4 falsch!
Gleitkommazahlen
Beispiele
3.14, .075, -20.0f, +1.527
1.25e-8, .425e17
Gegenbeispiele
2.5e3.5, e17, 1.2e200f falsch!
float double
Klaus Dorer & Joachim Orb Prozedurale Elemente
Hochschule Offenburg University of Applied Sciences
Es gilt
double float long int short byte
Klaus Dorer & Joachim Orb Prozedurale Elemente
Hochschule Offenburg University of Applied Sciences
char Datentyp
charKonstante = “ ‘ “ Zeichen “ ‘ “;
Zeichen = ein Zeichen des Unicode-Zeichensatzes;
Beispiele
'a', '1', '%', '\t', '\'', '\u03C0'
Gegenbeispiele
'ab', “a“, ' ' ' falsch!
Java verwendet Unicode, um Zeichen zu repräsentieren
Datentyp String
Ausgabe
public static void main(String[] args)
{
int age = 48;
System.out.print("Alter: ");
System.out.println(age);
System.out.println("Alter: " + age);
float groesse = 1.872f;
System.out.printf("Alter: %d Groesse: %4.2f %n", age, groesse);
}
Bezeichner
Konvention
Beginnen mit einem Kleinbuchstaben
Jedes neue Wort beginnt mit Großbuchstaben (Camel Case)
Variablen
Deklaration:
<Typ> <Bezeichner>;
// aktuelles Alter
int age;
// Geschlecht (f oder m)
char gender;
// Ist Präsident (true oder false)
boolean isPresident;
// Gehaltsbonus
double bonus;
Nur Zuweisung
bonus = income + 3000.0d; <Bezeichner> = <Ausdruck>;
Der Variablen links vom Gleichheitszeichen wird der Wert rechts zugewiesen
Der Wert von income ändert sich nicht
Vor der Verwendung muss einer Variablen ein Wert zugewiesen sein
Klaus Dorer & Joachim Orb Prozedurale Elemente
Hochschule Offenburg University of Applied Sciences
Konstanten
Vorteile?
Operatoren - Arithmetik
Division /
System.out.println(1 / 3.0); // 0.3333333333333333
System.out.println(1 / 3); // 0
Operanden werden in den größten gemeinsamen Typ konvertiert
Ist der eine Ganzzahl, wird eine ganzzahlige Division durchgeführt
Division durch 0 ist nicht erlaubt
Modulo %
int ergebnis1 = 9 % 5;
double ergebnis2 = 12.0 % 2.5;
Gibt den Rest einer Division zurück
Addition +, Subtraktion –, Multiplikation *
Vorzeichen – (+)
int ergebnis3 = -5 + 2 * (ergebnis1 – 1);
Es gilt Punkt vor Strichrechnung
Mit Klammerung kann die Reihenfolge festgelegt werden
Operatoren - Arithmetik
Die Summe aus a und b ist größer, als in einem int Platz hat
Operatoren - Arithmetik
Inkrement ++
int i = 10;
System.out.println(i++); // 10
System.out.println(i); // 11
Steht der Operator nach dem Operand wird erst nach der Auswertung
des Ausdrucks um eins erhöht
int i = 10;
System.out.println(++i); // 11
System.out.println(i); // 11
Steht der Operator vor dem Operand wird vor der Auswertung des
Ausdrucks um eins erhöht
Dekrement --
Dasselbe gilt für Dekrement: i --; -> i = i – 1;
Verwenden sie Inkrement und Dekrement nicht in Verbindung mit
anderen Operatoren
i++; //ok
int j = 5 + ++i; // fehleranfällig
Klaus Dorer & Joachim Orb Prozedurale Elemente
Hochschule Offenburg University of Applied Sciences
Operatoren - Arithmetik
Unterschiedliche Operanden
Typkonvertierungen des „kleineren“ Operanden in den „größeren“
Sonderregel: byte und short werden immer nach int konvertiert
Beispiele
float f; double d; int i; short s;
f + i; // float
s + s; // int!!!
d + s; // double
f = i/3; // i/3 ist int!, der gesamte Ausdruck ist float
Operatoren – Vergleich
Vergleichsoperatoren
int x = 5;
int y = 5;
boolean a = x > y; // a ist false
<, >, >=, <= mit den erwarteten Bedeutungen
Gleichheitsoperatoren
boolean b = x == y; // true
boolean c = (x = y); // Compilerfehler
== Gleichheit
!= Ungleichheit
Wichtig!
Das einfache Gleichheitszeichen = ist eine Zuweisung deren Wert vom Typ
der Operatoren abhängt.
Das doppelte Gleichheitszeichen == ist für den Vergleich von Werten (und
Referenzen) und das Ergebnis ist immer vom Typ boolean
== und != sollten nicht für Fließkommazahlen angewendet werden (siehe
Rundungsfehler)
Aufgabe Lösung
Ihr Beispiel
x a b c
-2
20
Zuweisung falsch
= ist kein mathematisches Gleichheitszeichen.
Es macht einen Unterschied, was rechts und was
int laenge;
links steht. Links muss eine Variable stehen, der
5 = laenge;
der Wert rechts zugewiesen wird.
Vergleich von Fließkommazahlen
float wert = 0.3f + 0.6f;
Kein Vergleich von
boolean ergebnis;
Fließkommazahlen mit == oder !=
ergebnis = (wert == 0.9f);
wegen Rundungsfehlern
// false (Rundungsfehler!)
Überlauf
int zahl = 1234567890;
int zahl2 = 10 * zahl; Die Zahl wird zu groß und passt
// -539222988 (falsch) nicht in eine int Variable
Priorität/Reihenfolge nicht beachtet
int a = 5; Das erste Plus fügt die Strings
int b = 3; „a+b=„ und „5“ zusammen.
String s = "a+b=" + a + b; Klammern nutzen, um die
// a+b=53 (unerwartet) Reihenfolge zu beeinflussen!
Klaus Dorer & Joachim Orb Prozedurale Elemente
Hochschule Offenburg University of Applied Sciences
Kontrollfluss
Block Verschachtelung
// Blockanfang {
{ int var = 1;
... {
// Lokale Variable var // Fehler!
int var = 1; long value = number +1;
var++; long number = 5;
... double var; // Fehler!
} }
// Blockende value = 10L; // Fehler!
}
// Variable var nicht mehr
Blöcke können beliebig tief
zugreifbar
geschachtelt werden
Variablen sind erst ab ihrer
Ein Block kann eine beliebige Deklaration verfügbar
Anzahl Statements beinhalten
Zwei Variablen dürfen nicht
und ist selbst ein Statement
denselben Namen haben
Blöcke sind Gültigkeitsbereiche
Variablen sind nur innerhalb
für Variablen
eines Blocks und seiner einge-
schachtelten Blöcke sichtbar
Klaus Dorer & Joachim Orb Prozedurale Elemente
Hochschule Offenburg University of Applied Sciences
Verzweigungen
if – Formale Beschreibung
if - Diagramme x--
x=5; y=10;
x=5, y=10 ...
[else]
[x==y]
nein
x == y?
ja Aktion
Prozedural
y++;
[x==y]
y++
…
[x<y]
x=5, y=10 x++ ...
[else]
x--
[else]
Erweiterung
Es soll die betragsmäßig größere Zahl ermittelt werden
Zeichnen sie davon das Aktivitätsdiagramm bzw. den
Programmablaufplan
Strichpunkt nach if
Beendet das if!
if (laenge == breite);
{ ergebnis = true wird immer ausgeführt.
ergebnis = true;
}
Erweiterungen
Prüfen sie auch, ob laenge und breite gültige Werte enthalten
Was passiert, wenn die Parameter float sind?
… ... ...
"It is c or
PAP d"
[c or d]
nein
a? "Anything
[else] else"
ja
Aktivitätsdiagramm
b? „It is a“
…? …
Erweiterung
Auch die Leertaste soll feuern
Wie würde dasselbe mit einem if aussehen?
Break vergessen
switch (taste) {
case 'a':
System.out.println("links");
case 'd':
System.out.println("rechts");
}
Break fehlt!
Bei a wird links und rechts gefahren.
Schleifen
while führt die Schleife so lange aus, wie Ausdruck true ist
<Ausdruck> muss vom Typ boolean sein
Auch wenn nur eine Anweisung wiederholt wird, sollte trotzdem ein
Block verwendet werden
eine while Schleife kann auch gar nicht ausgeführt werden
Syntax
int sum = 0; while (<Ausdruck>) {
int i = 1;
while (i <= 4) { [<Anweisung>]*
sum = sum + i; }
i++;
}
do..while führt die Schleife so lange aus, wie Ausdruck true ist
Die Bedingung wird aber erst am Ende der Schleife geprüft
<Ausdruck> muss vom Typ boolean sein
Auch wenn nur eine Anweisung wiederholt wird, sollte trotzdem ein
Block verwendet werden
eine do..while Schleife wird mindestens einmal ausgeführt
Syntax
int sum = 0; do {
int i = 1;
do { [<Anweisung>]*
sum = sum + i; } while (<Ausdruck>);
i++;
} while (i <= 4);
Jede for Schleife kann in eine while Schleife umgewandelt werden und
umgekehrt
PAP
for und while do..while
… …
nein r=r+i
Visual Paradigm for UML Standard Edition(Hochschule Offenburg)
i<=4?
...
ja i++ ja
r=r+i
…
Visual Paradigm for UML Standard Edition(Hochschule Offenburg)
i++ "Anything
i<=4?
else"
Aktivitätsdiagramm
…
nein
[else]
...
...
... r=r+i i++ ...
[else]
[i<=4]
[i<=4]
r=r+i i++
Methoden („Funktionen“)
Methoden (statisch)
Methoden (statisch)
Methoden (statisch)
Aufruf (Verwendung)
x in getMax(int x, int y) wird eine Kopie von a, y eine Kopie von b
Syntax
[<Ergebnis> = ] <Methodenname>([<Argumentliste>]);
Methoden (statisch)
Methodenüberladung
Es kann mehrere Methoden mit dem gleichen Namen geben, wenn die
Parameterliste unterschiedlich ist
static int getMax(int x, int y, int z)
{
…
}
auch ein unterschiedlicher Typ reicht
static String getMax(String s1, String s2)
{
… // alphabetischer Vergleich
}
Programmablaufplan
getMax
Visual Paradigm for UML Standard Edition(Hochschule Offenburg)
r=r+i i++
Aktivitätsdiagramm
Zusammenfassung
Schlüsselwörter
boolean, byte, short, int, long, char, float, double
final
if, else, switch, case, default, break
for, while, do
return, void
Literale
true, false
Übungen
Schreiben Sie ein Programm, das die Zahlen von 0 bis 10 ausgibt
.. Programm, das alle Rest-frei durch 7 teilbaren Zahlen von 0 bis 100 ausgibt
.. Programm, das prüft ob ein Jahr ein Schaltjahr ist
.. Programm, das Zeichen als Vokal oder Konsonant klassifiziert (switch-case)
..(effizientes) Programm, das die ersten n Primzahlen berechnet