2. Einfache Java-Programme Grundlagen der Programmierung 1

Werbung
2. Einfache Java-Programme
Grundlagen der
Programmierung 1 (Java)
Fachhochschule Darmstadt
Haardtring 100
D-64295 Darmstadt
Prof. Dr. Bernhard Humm
FH Darmstadt, 4. Oktober 2005
Agenda
Agenda
Grundstruktur
Grundstruktur
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 2
Grundstruktur
Grundsymbole
Namen
bezeichnen Variablen, Typen, ... in einem Programm
- bestehen aus Buchstaben, Ziffern und "_"
- beginnen mit Buchstaben
- beliebig lang
- Groß-/Kleinschreibung signifikant!
Schlüsselwörter
- heben Programmteile hervor
- dürfen nicht als Namen verwendet werden
x
x17
myVar
my_var
MyClass
doSomething
getAddress
CONSTANT
if
while
for
repeat
private
public
Satzzeichen
- Interpunktionszeichen, engl. seperators
; , . () {} []
Operatoren
- bilden Ausdrücke
Trennung lexikalischer Einheiten
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
=><!~?:&|+-*/^%
Leerzeichen, Tabulator, Zeilenvorschub, Satzzeichen, Operatoren, Kommentare
4.10.2005, Seite 3
Grundstruktur
Lexikalische Konventionen
Variablennamen Kleinbuchstaben
variable
Methodennamen Kleinbuchstaben
methode()
Klassennamen
Person
Großbuchstaben
symbolische Konstanten
MAXIMUM
alle Buchstaben groß
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!
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 4
Grundstruktur
Grundstruktur von Java-Programmen
class ProgramName {
public static void main (String[] arg) {
... // Deklarationen
... // Anweisungen
}
… // weitere Methoden
}
Beispiel
class Sample {
public static void main (String[] args) {
}
}
Text muß in einer Datei namens
ProgramName.java stehen
- Jede Deklaration und jede
Anweisung muss mit
Semikolon enden
- Zusammengehörige
Gruppen von Anweisungen
einrücken
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
Text steht in Datei
Sample.java
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 5
Grundstruktur
Kommentare:
Erläuterungen des Programms
Zeilenendekommentare
int sum; // total sales
- beginnen mit //
- gehen bis zum Zeilenende
Klammerkommentare
-
durch /* ... */ begrenzt
können über mehrere Zeilen gehen
dürfen nicht geschachtelt werden
oft zum "Auskommentieren" von
Programmteilen
/* Das ist ein längerer
Kommentar, der über
mehrere 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!
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 6
Grundstruktur
Ü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?
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 7
Agenda
Agenda
Grundstruktur
Datentypen
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 8
Datentypen
Datentypen
Datentyp =
Wertebereich + Operationen
Ä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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 9
Datentypen
Klassifikation der Datentypen in Java
Datentyp
Einfacher
(elementarer, primitiver) Typ
Wahrheitswerte
- boolean
Zeichen-Typ
- char
Integer-Typ
- byte
- short
- int
- long
Referenztyp
numerischer
Typ
KlassenTyp
ArrayTyp
SchnittstellenTyp
Gleitpunkt-Typ
- float
- double
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 10
Datentypen
Der Datentyp boolean
Wertebereich
Operationen
• Konjunktion (&& bzw. &) UND:
true && false false
• true
• false
• Disjunktion (|| bzw. |) ODER:
true || false true
• Negation (!) NICHT:
!true false
• Exklusives Oder (^):
true ^ true false
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 11
Datentypen
Boolean Wahrheitstafeln
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:
boolean isEmployed, isaMinor, isaYoungWorker, isaVoter;
isaYoungWorker = isEmployed & isaMinor;
isaVoter = ! isaMinor;
isaTaxpayer = isaVoter | isEmployed;
boolean freeBus = (isPensioner | isaMinor) & !isEmployed;
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 12
Datentypen
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;
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 13
Datentypen
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 14
Agenda
Agenda
Grundstruktur
Datentypen
Methoden
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 15
Methoden
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 16
Methoden
Deklaration einer Methode
public / private,
static, final
Ergebnis-Datentyp
oder void
Namen und Datentypen
der Eingaben
Modifier Rückgabetyp Name (Typ1 Parameter1, … Typn Parametern) {
Deklarationen und Anweisungen;
return Ausdruck;
// falls nicht void
}
Beendigung und
Rückgabe
innerhalb einer Klasse, vor/nach der main-Methode
Reihenfolge der Methodendeklarationen hat keinen Einfluß auf
Semantik
keine Schachtelung von Methodendeklarationen möglich
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 17
Methoden
Funktionen und Prozeduren:
Beispiele für Methodendeklarationen
Funktionen: Methoden mit Rückgabewert; ohne Seiteneffekte
public static float fahrenheit(float c) {
return c *9/5 +32;
}
Prozeduren: Methoden ohne Rückgabewert; mit Seiteneffekten
public static void printBox() {
System.out.println(“--------“);
System.out.println(“|
|“);
System.out.println(“|
|“);
System.out.println(“--------“);
}
Mischformen sind möglich, aber sollten vermieden werden!
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 18
Methoden
Aufruf einer Methode
Aufruf einer Methode, welche in derselben Klasse deklariert ist:
f = fahrenheit(42);
printBox ();
Geschachtelte Methodenaufrufe:
main() {
int f(int m,n) {
(4)
(2)
(1)
(3)
n=f(2, 42);
(9)
(8)
}
void p(float x) {
(5)
p(n);
(7)
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
(6)
}
4.10.2005, Seite 19
Methoden
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 20
Methoden
Der Teufel steckt im Detail
Welche 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;
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 21
Methoden
Korrektheit von Methoden:
Vor- und Nachbedingungen
public static float fahrenheit(float c)
pre: c > -273,15
post: result = c *9/5 +32
Vorbedingung (pre condition)
Nachbedingung (post condition)
• Muss der Aufrufer sicher stellen
• Muss die Methode sicherstellen
• Kann die Methode erwarten:
• Kann der Aufrufer erwarten:
public static int fahrenheit(int c) {
assert (c > -273,15);
return c *9/5 +32;
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
…
f = fahrenheit(c);
assert (f == c *9/5 +32);
…
4.10.2005, Seite 22
Agenda
Agenda
Grundstruktur
Datentypen
Methoden
Ausdrücke
Zuweisungen
Ausdrücke &&Zuweisungen
Ein- / Ausgabe
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 23
Ausdrücke & Zuweisungen
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 boolean
int 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;
int x = 100, y = 0;
deklariert boolean Variable mit Initialwert false
deklariert int Variablen x und y und weist Werte zu
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 24
Ausdrücke & Zuweisungen
Konstantendeklaration
Initialisierte "Variablen", deren Wert man nicht mehr ändern kann
static final float PI = 3.14159;
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 25
Ausdrücke & Zuweisungen
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”) {
…
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
static final float PI = 3.14159;
static final int MONTAG = 1
float u, r;
int tag;
…
u = 2 * PI * r;
…
if (tag == MONTAG) {
…
}
4.10.2005, Seite 26
Ausdrücke & Zuweisungen
Zuweisungen
x = x+1 ;
Variable
1. berechne den Ausdruck
2. speichere seinen Wert in der Variablen
Ausdruck
Bedingung: linke und rechte Seite müssen zuweisungskompatibel
sein
- müssen dieselben Typen haben, oder
- Typ links ⊇ Typ rechts
Hierarchie der ganzzahligen Typen
long ⊇ int ⊇ short ⊇ byte
Beispiele
int i, j; short s; byte b;
i = j;
// ok: derselbe Typ
i = 300; // ok (Zahlkonstanten sind int)
b = 300; // falsch: 300 paßt nicht in byte
i = s;
// ok
s = i;
// falsch
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 27
Ausdrücke & Zuweisungen
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
Modulo (Divisionsrest)
4%3
(-4)/3
(-4)%3
4/(-3)
4%(-3)
(-4)/(-3)
(-4)/(-3)
Unäre Operatoren
+
-
Identität (+x = x)
Vorzeichenumkehr
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 28
Ausdrücke & Zuweisungen
Vorrangs- und Typregeln in arithmetischen Ausdrücken
Vorrangregeln
- Punktrechnung (*, /, %) vor Strichrechnung (+, -)
- Unäre Operatoren binden stärker als binäre
z.B.: 3 + 4 * -2 ergibt -5
Typregeln
Operandentypen byte, short, int, long
Ergebnistyp
- wenn mindestens 1 Operand long ist ⇒ long
- sonst ⇒ int
Beispiele
Typumwandlung (type cast)
(type)expression
short s; int i; long x;
x = x + i; // long
i = s + 1; // int (1 ist vom Typ int)
s = (short)(s + 1); // Typumwandlung nötig
- wandelt Typ von expression in type um
- dabei kann etwas abgeschnitten werden
i
(short)i
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 29
Ausdrücke & Zuweisungen
Typkonvertierung
Eine Konvertierung primitiver Datentypen heißt erweiternd, wenn sie in
Pfeilrichtung erfolgt, einschränkend, wenn sie entgegen der
Pfeilrichtung erfolgt.
byte
short
int
long
float
double
char
Implizite Typkonvertierung
• Erweiternde Typkonvertierung; vom
Compiler automatisch durchgeführt
• Bei nicht identischen, aber
kompatiblen Variablen, Ausdrücken,
Parametern
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
Explizite Typkonvertierung
• Erweiternde oder einschränkende
Typkonvertierung; vom
Programmierer erzwungen durch den
Type Cast Operator
• Beispiel:
double a = 5.0;
int i= (int) a;
4.10.2005, Seite 30
Ausdrücke & Zuweisungen
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
T (time): Zeit in Jahren
P (principal): Guthaben
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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 31
Beispiel: Zinsberechnung
public class Sample {
static final double
static final int
static final double
static final double
p = 1000;
m = 4;
oldRate = 12.5;
newRate = 13.0;
//
//
//
//
in EUR
for April
%
%
public static void main(String[] args) {
double dif = 0;
// perform calculation
dif = computeInterest(p, m, oldRate) –
computeInterest(p, m, newRate);
// print out the result
System.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;
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 32
Agenda
Agenda
Grundstruktur
Datentypen
Methoden
Ausdrücke & Zuweisungen
Ein- / Ausgabe
Ausgabe
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 33
Ein- / Ausgabe
Standard-Ein- und Ausgabe
Ausgabe
auf die Konsole
Eingabe
von der Tastatur
Programm
System.in
System.out
Punkt-Notation: Zugriff auf Attribute und Methoden von Klassen und
Objekten (siehe Objekt-Orientierung
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 34
Ein- / Ausgabe
Standard-Ausgabe
Ausgabe auf die Konsole:
System.out.print(“ein Text“); // Parameter: Zeichenkette (String)
Zeilenvorschub:
System.out.println();
// print line
beziehungsweise
System.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
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 35
Ein- / Ausgabe
Standard-Eingabe
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);
Komplizierter als
Standard-Ausgabe
Import des Java-Pakets
für Ein-/Ausgabe
Exception Handling
Geschachtelte ObjektInstaziierung
Klassenmethoden
verschiedener Klassen
}
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
4.10.2005, Seite 36
Herunterladen