2. Einfache Java-Programme
Prof. Dr. Bernhard HummFH Darmstadt, 4. Oktober 2005
Grundlagen der Programmierung 1 (Java)
Fachhochschule DarmstadtHaardtring 100 D-64295 Darmstadt
Grundstruktur
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Seite 24.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
� Grundstruktur
Agenda
Agenda
Seite 34.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Grundsymbole
Namenbezeichnen Variablen, Typen, ... in einem Programm- bestehen aus Buchstaben, Ziffern und "_"- beginnen mit Buchstaben- beliebig lang- Groß-/Kleinschreibung signifikant!
x MyClassx17 doSomethingmyVar getAddressmy_var CONSTANT
Schlüsselwörter- heben Programmteile hervor- dürfen nicht als Namen verwendet werden
if for privatewhile repeat public
; , . () {} []Satzzeichen- Interpunktionszeichen, engl. seperators
Operatoren- bilden Ausdrücke = > < ! ~ ? : & | + - * / ^ %
Trennung lexikalischer Einheiten Leerzeichen, Tabulator, Zeilen-vorschub, Satzzeichen, Opera-toren, Kommentare
Grundstruktur
Seite 44.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Lexikalische Konventionen
� Variablennamen Kleinbuchstaben variable
� Methodennamen Kleinbuchstaben methode()
� Klassennamen Großbuchstaben Person
� symbolische Konstanten alle Buchstaben großMAXIMUM
� Bei zusammengesetzten Namen werden ab dem 2. Wort jeweils der 1. Buchstabe des Wortes groß geschrieben, z.B. die Variable firstName, die Methode getFirstName()
� Stets sprechende Namen wählen!
Grundstruktur
Seite 54.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
class ProgramName {
public static void main (String[] arg) {... // Deklarationen... // Anweisungen
}… // weitere Methoden
}
Grundstruktur von Java-Programmen
Beispiel
class Sample {public static void main (String[] args) {}
}
Text muß in einer Datei namensProgramName.java stehen
Text steht in DateiSample.java
Klassenname
Main-Methode:-public: kann von außen gerufen werden- static: ist Klassenmethode- void: gibt keinen Wert zurück- String[] args: Array args aus Zeichenketten als Parameter
- Jede Deklaration und jede Anweisung muss mit Semikolon enden- Zusammengehörige Gruppen von Anweisungen einrücken
Grundstruktur
Seite 64.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Kommentare:Erläuterungen des Programms
Zeilenendekommentare- beginnen mit //- gehen bis zum Zeilenende
int sum; // total sales
Klammerkommentare- durch /* ... */ begrenzt- können über mehrere Zeilen gehen- dürfen nicht geschachtelt werden- oft zum "Auskommentieren" vonProgrammteilen
/* Das ist ein längererKommentar, der übermehrere Zeilen geht */
Sinnvoll kommentieren!- alles kommentieren, was Erklärung bedarf- statt unklares Programm mit Kommentar, besser klares Programm ohne Kommentar- nicht kommentieren, was ohnehin schon im Programm steht; zum Beispiel nicht:int sum; // Summe
- Möglichst englische Bezeichner und Kommentare; nicht deutsch und englisch mischen!
Grundstruktur
Seite 74.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Übersetzen und Ausführen mit JDK
� JDK installieren
download http://java.sun.com/j2se/1.5.0/download.jsp
� Übersetzen
C:\> cd MySamples wechselt ins Verzeichnis mit der Quelldatei
C:\MySamples> javac Sample.java erzeugt Datei Sample.class
� Ausführen
C:\MySamples> java Sample ruft main-Methode der Klasse Sample auf
� Frage: Wer ruft die Main-Methode auf?
Grundstruktur
Grundstruktur
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Seite 84.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
� Datentypen
Agenda
Agenda
Seite 94.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Datentypen
� Äpfel können nicht mit Birnen verglichen werden
� Zentrales Konzept der Informatik
� Bekannt aus der Mathematik: Gruppen, Körper, Ringe, Algebren
� Auch Datenstruktur, abstrakter Datentyp genannt
� In Programmiersprache zusätzlich: Darstellung im Speicher
Datentyp =
Wertebereich + Operationen
Datentypen
Seite 104.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Klassifikation der Datentypen in Java
Datentyp
Einfacher(elementarer, primitiver) Typ
Referenztyp
Wahrheitswerte- boolean
Zeichen-Typ- char
Integer-Typ- byte- short- int- long
Gleitpunkt-Typ- float- double
Klassen-Typ
Array-Typ
Schnittstellen-Typ
numerischerTyp
Datentypen
Seite 114.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Der Datentyp boolean
• true
• false
Wertebereich
• Konjunktion (&& bzw. &) UND: true && false� false
• Disjunktion (|| bzw. |) ODER: true || false� true
• Negation (!) NICHT: !true� false
• Exklusives Oder (^): true ^ true� false
Operationen
Datentypen
Seite 124.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Boolean Wahrheitstafeln
boolean isEmployed, isaMinor, isaYoungWorker, isaVoter;
isaYoungWorker = isEmployed & isaMinor;
isaVoter = ! isaMinor;
isaTaxpayer = isaVoter | isEmployed;
boolean freeBus = (isPensioner | isaMinor) & !isEmployed;
x1 x2 AND && OR || XOR ^
true true true true false
true false false true true
false true false true true
false false false false false
x1 NOT !
true false
false true
Beispiele:
Datentypen
Seite 134.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Boolesche Ausdrücke
� Operanden vom Typ byte, int, short, long, float, double oder char und gelieferter Ergebniswert vom Typ boolean
� Operatoren für Vergleiche
== Gleichheit 4 == 5 (ergibt false)
!= Ungleichheit 6 != 7 (ergibt true)
> Größer 'a' > 'b' (ergibt false)
< Kleiner -2. < 0.1 (ergibt true)
>= Größer-Gleich 1 >= -1 (ergibt true)
<= Kleiner-Gleich 3 <= 3 (ergibt true)
boolean isPensioner; int age = 67; isPensioner = age > 65;
Datentypen
Seite 144.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Operator-Prioritäten
� Verarbeitungsreihenfolge boolescher Operatoren in Java
1. ( )
2. !
3. &
4. |
5. &&
6. ||
� Vergleichsoperatoren haben in Java eine höhere Priorität als boolesche Operatoren!
� Klammern benutzen ! (zur Erhöhung der Lesbarkeit)
� möglichst einfache boolesche Ausdrücke verwenden
Datentypen
Grundstruktur
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Seite 154.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
� Methoden
Agenda
Agenda
Seite 164.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Methoden
� Definition: Teil eines Programms, das in in sich abgeschlossene Aufgabe löst und hierzu eine Folge von Anweisungen und Deklarationen ausführt
� Analogon zu Funktion in der Mathematik (wie auch Operatoren)
� Vorteile
– bessere Übersichtlichkeit von Programmen (Struktur)
– separate Lösung von Teilproblemen
– Wiederverwendbarkeit
� Aspekte: Methodendeklaration und Methodenaufruf
Methoden
Seite 174.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Deklaration einer Methode
� innerhalb einer Klasse, vor/nach der main-Methode
� Reihenfolge der Methodendeklarationen hat keinen Einfluß auf Semantik
� keine Schachtelung von Methodendeklarationen möglich
Modifier Rückgabetyp Name (Typ1 Parameter1, … Typn Parametern) {Deklarationen und Anweisungen;return Ausdruck; // falls nicht void
}
public / private, static, final
Ergebnis-Datentyp oder void
Namen und Datentypen der Eingaben
Beendigung und Rückgabe
Methoden
Seite 184.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Funktionen und Prozeduren:Beispiele für Methodendeklarationen
� Funktionen: Methoden mit Rückgabewert; ohne Seiteneffekte
� Prozeduren: Methoden ohne Rückgabewert; mit Seiteneffekten
� Mischformen sind möglich, aber sollten vermieden werden!
public static float fahrenheit(float c) {return c *9/5 +32;
}
public static void printBox() {System.out.println(“--------“);System.out.println(“| |“);System.out.println(“| |“);System.out.println(“--------“);
}
Methoden
Seite 194.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Aufruf einer Methode
� Aufruf einer Methode, welche in derselben Klasse deklariert ist:
� Geschachtelte Methodenaufrufe:
f = fahrenheit(42);
printBox ();
n=f(2, 42);
main() { int f(int m,n) {
p(n);
void p(float x) {
} } }
(1) (2)(3)
(4)
(5)
(6)(7)(8)(9)
Methoden
Seite 204.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Formale und aktuelle Parameter
� Formale Parameter (Methoden-Deklaration)
– Einführung einer lokalen Variable für die Methode
– wie viele Übergabeparameter, von welchem Typ und in welcher Reihenfolge
� Aktuelle Parameter (Methoden-Aufruf)
– Übergabe eines "Initialwertes" für den formalen Parameter
– Bedingung: Anzahl an formalen Parametern = Anzahl an aktuellen Parametern
– für alle Parameter in der entsprechenden Reihenfolge gilt: Typ des aktuellen Parameters ist typkonform zum Typ des formalen Parameters
Methoden
Seite 214.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Der Teufel steckt im DetailWelche Fehler haben sich eingeschlichen?
public static void methode1(int a) {
return 2 * a;
}
public static int methode2 (int a) {
return (a == a);
}
public static int methode3 (int a) {
int temp = 2 * a;
}
Methoden
Seite 224.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Korrektheit von Methoden: Vor- und Nachbedingungen
public static float fahrenheit(float c)
pre: c > -273,15
post: result = c *9/5 +32
• Muss der Aufrufer sicher stellen
• Kann die Methode erwarten:
public static int fahrenheit(int c) {assert (c > -273,15);return c *9/5 +32;
}
Vorbedingung (pre condition)
• Muss die Methode sicherstellen
• Kann der Aufrufer erwarten:
…f = fahrenheit(c);assert (f == c *9/5 +32);…
Nachbedingung (post condition)
Methoden
Grundstruktur
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Seite 234.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
� Ausdrücke & Zuweisungen
Agenda
Agenda
Seite 244.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Variablendeklarationen
Jede Variable muss vor ihrer Verwendung deklariert werden- macht den Namen und den Typ der Variablen bekannt- Compiler reserviert Speicherplatz für die Variable
boolean isCorrect; deklariert eine Variable Typ booleanint x, y; deklariert zwei Variablen x und y vom Typ int (Ganzzahl)
Initialisierung- Jede Variable sollte explizit initialisiert werden- Programmierstil: Variablendeklaration und Initialisierung am Anfang der Methode
boolean isCorrect = false; deklariert boolean Variable mit Initialwert falseint x = 100, y = 0; deklariert int Variablen x und y und weist Werte zu
Ausdrücke & Zuweisungen
Seite 254.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Konstantendeklaration
� Initialisierte "Variablen", deren Wert man nicht mehr ändern kann
� Zweck:
– bessere Lesbarkeit: max ist lesbarer als 100
– bessere Wartbarkeit: wenn die Konstante mehrmals vorkommt und geändert werden muss, dann muss das nur an 1 Stelle erfolgen
� Konstantendeklaration muss auf Klassenebene stehen (s. später)
� Konvention: GROSSBUCHSTABEN
static final float PI = 3.14159;
Ausdrücke & Zuweisungen
Seite 264.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Programmierstil:Verwende niemals Literale im Code
� Literale sind feste Werte von Datentypen
float u, r;String tag;…u = 2 * 3.14159 * r;…if (tag == “Montag”) {…
}
static final float PI = 3.14159;static final int MONTAG = 1float u, r;int tag;…u = 2 * PI * r;…if (tag == MONTAG) {…
}
��
Ausdrücke & Zuweisungen
Seite 274.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Zuweisungen
x = x + 1 ;
Variable Ausdruck
1. berechne den Ausdruck2. speichere seinen Wert in der Variablen
Bedingung: linke und rechte Seite müssen zuweisungskompatibelsein- müssen dieselben Typen haben, oder- Typ links ⊇ Typ rechts
Hierarchie der ganzzahligen Typen
long ⊇ int ⊇ short ⊇ byte
Statische Typenprüfung: Compiler prüft:- dass Variablen nur erlaubte Werte enthalten- dass auf Werte nur erlaubte Operationen ausgeführt werden� Java ist eine streng typisierte Sprache
Beispieleint i, j; short s; byte b;i = j; // ok: derselbe Typi = 300; // ok (Zahlkonstanten sind int)b = 300; // falsch: 300 paßt nicht in bytei = s; // oks = i; // falsch
Ausdrücke & Zuweisungen
Seite 284.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Arithmetische Ausdrücke
Vereinfachte Grammatik (EBNF)
Expr = Operand {BinaryOperator Operand}.Operand = [UnaryOperator] ( identifier | number | "(" Expr ")" ).
Binäre Operatoren
+ Addition
- Subtraktion
* Multiplikation
/ Division, Ergebnis ganzzahlig 4/3 (-4)/3 4/(-3) (-4)/(-3)
% Modulo (Divisionsrest) 4%3 (-4)%3 4%(-3) (-4)/(-3)
Unäre Operatoren
+ Identität (+x = x)
- Vorzeichenumkehr
Ausdrücke & Zuweisungen
Seite 294.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Vorrangs- und Typregeln in arithmetischen Ausdrücken
Vorrangregeln
- Punktrechnung (*, /, %) vor Strichrechnung (+, -)- Unäre Operatoren binden stärker als binärez.B.: 3 + 4 * -2 ergibt -5
Typumwandlung (type cast)
(type)expression
- wandelt Typ von expression in type um- dabei kann etwas abgeschnitten werden
(short)i
i
TypregelnOperandentypen byte, short, int, longErgebnistyp - wenn mindestens 1 Operand long ist ⇒ long
- sonst ⇒ int
Beispiele
short s; int i; long x;x = x + i; // longi = s + 1; // int (1 ist vom Typ int)s = (short)(s + 1); // Typumwandlung nötig
Ausdrücke & Zuweisungen
Seite 304.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Typkonvertierung
� Eine Konvertierung primitiver Datentypen heißt erweiternd, wenn sie in Pfeilrichtung erfolgt, einschränkend, wenn sie entgegen der Pfeilrichtung erfolgt.
byte
char
short int long float double
• Erweiternde Typkonvertierung; vom Compiler automatisch durchgeführt
• Bei nicht identischen, aber kompatiblen Variablen, Ausdrücken, Parametern
Implizite Typkonvertierung
• Erweiternde oder einschränkende Typkonvertierung; vom Programmierer erzwungen durch den Type Cast Operator
• Beispiel:double a = 5.0; int i= (int) a;
Explizite Typkonvertierung
Ausdrücke & Zuweisungen
Seite 314.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Beispiel: Zinsberechnung
Problem: Eine Bank ändert oft ihre Zinssätze.Frage: Wie verändern sich dadurch mein Zinsertrag?
Lösung: Was wissen wir? Was wollen wir wissen ? Wie bekommen wir das Ergebnis heraus?
Formel: I = (P T R) / 100
I (interest): Zinsertrag pro Jahr P (principal): GuthabenT (time): Zeit in Jahren R (rate): Zinssatz
Algorithmus:
– M Nummer des aktuellen Monats
– (12 - M) /12 noch zu verzinsende Zeit im laufenden Jahr
– (P * (12 - M) / 12) * oldRate) / 100 Zinsen bei altem Zinssatz
– (P * (12 - M) / 12) * newRate) / 100 Zinsen bei neuem Zinssatz
– Die Differenz hieraus ergibt die gesuchte Veränderung des Ertrags
Ausdrücke & Zuweisungen
Seite 324.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Beispiel: Zinsberechnung
public class Sample {static final double p = 1000; // in EURstatic final int m = 4; // for Aprilstatic final double oldRate = 12.5; // %static final double newRate = 13.0; // %
public static void main(String[] args) {double dif = 0;
// perform calculationdif = computeInterest(p, m, oldRate) –
computeInterest(p, m, newRate);
// print out the resultSystem.out.println("Interest will change by: " + dif);
}
public static double computeInterest(double p, int m, double r) {
double i = 0;double t = 0;
t = (12.0 - m) / 12.0;i = p * t * r / 100;return i;
} }
Grundstruktur
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Seite 334.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
� Ein- / Ausgabe
Agenda
Agenda
Seite 344.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Standard-Ein- und Ausgabe
� Punkt-Notation: Zugriff auf Attribute und Methoden von Klassen und Objekten (siehe Objekt-Orientierung
Programm
Eingabe von der Tastatur
System.in
Ausgabeauf die Konsole
System.out
Ein- / Ausgabe
Seite 354.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Standard-Ausgabe
� Ausgabe auf die Konsole:System.out.print(“ein Text“); // Parameter: Zeichenkette (String)
� Zeilenvorschub:System.out.println(); // print line
beziehungsweiseSystem.out.print(“ \n“); // newline Character
� Eine einzelne Zeichenkette darf nicht auf mehrere Zeilen aufgeteilt werden:“Das geht
so nicht“
� Konkatenation (Verkettung) von Zeichenketten mit +-Operator:“ Output value: “ + diff + “ Euro \n“
Dabei implizite Typkonversion double � String
Ein- / Ausgabe
Seite 364.10.2005,Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Standard-Eingabe
� Komplizierter als Standard-Ausgabe
� Import des Java-Pakets für Ein-/Ausgabe
� Exception Handling
� Geschachtelte Objekt-Instaziierung
� Klassenmethoden verschiedener Klassen
import java.io.*;
public class Sample { public static void main(String[] args) throws IOException{ int a, b, c; BufferedReader din = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Bitte a eingeben: "); a = Integer.parseInt(din.readLine()); System.out.println("Bitte b eingeben: "); b = Integer.parseInt(din.readLine()); c = a + b; System.out.println("a+b="+c); } }
Ein- / Ausgabe