Einführung in die Java- Programmierung

Werbung
Einführung in die JavaProgrammierung
Dr. Volker Riediger
Der hat die früher
handschriftlichen
Folien lesbar
gemacht.
Tassilo Horn
riediger|[email protected]
WiSe 2012/13
1
Heutige Themen
●
Hello World! Unser erstes Programm
●
Datentypen
●
●
Zahlen, Wahrheitswerte, Zeichenketten
Variablen
●
Deklarationen, Zuweisungen
●
Ausdrücke & Operationen
●
Ein- und Ausgabe
●
Verzweigungen
●
Häufige Fehler
2
Demo: HelloWorld.java
●
Ein Java-Projekt in Eclipse anlegen
1.File > New > Java Project
2.Projektname angeben
3.Finish drücken
●
Eine Programm im Projekt anlegen
1.New > Class
2.Klassenname angeben
3.[x] bei public static void main(String[] args)
4.Finish
3
Anatomie eines Java-Programms
●
Java-Programme bestehen aus Klassen
●
Klassen- und Dateinamen korrespondieren:
Klasse HelloWorld ==> HelloWorld.java
●
●
●
●
Klassen enthalten Methoden (Funktionen,
Prozeduren)
Methoden enthalten die eigentlichen
Anweisungen
Die Programmausführung beginnt bei der
Methode main()
Fürs erste, ignoriert die Schlüsselworte public,
static, void
4
Die drei Schritte der JavaProgrammierung
5
Zahlen
●
●
Aus der Mathematik kennt ihr die
●
natürliche Zahlen: N
●
ganze Zahlen: Z
●
rationale Zahlen: Q
●
reelle Zahlen: R
Problem: Diese Mengen sind unendlich und
Zahlen beliebig groß
●
Extremfall: Irrationale Zahlen (z.B. PI) können mit
endlichem Speicherplatz nicht repräsentiert
werden
6
Datentypen in Java
Typ
int
Wertebereich
ganze Zahlen, 32bit, von
-2^31 bis 2^31-1
long
ganze Zahlen, 64bit, von
-2^63 bis 2^63-1
double Fließkommazahlen,
64bit, ~16 Dezimalstellen
genau
boolean Wahrheitswerte: true
oder false
String
Zeichenketten
Standardwert
Beispiele
0
-100, 17, 9999
0
1000000000000l,
-13l
0.0001, -117.3,
3.14159
0.0
false
false, true
“Hallo Welt!”
7
Variablen in der Mathematik
●
In der Mathematik haben Variablen
●
einen Namen
●
eine Grundmenge
●
einen evtl. unbekannten, aber nicht
veränderbaren Wert
8
Variablen in der Mathematik
●
Mathematische Variablen sind nicht
änderbar, sondern sie sind Namen für
eine Zahl
9
Variablen in Java
●
Variablen in Programmen haben
●
●
●
●
einen Namen
einen während der Lebensdauer festen
Datentyp
einen über die Zeit veränderbaren Wert
Wichtig: Vor der Benutzung muss eine
Variable deklariert werden!
10
Variablendeklaration
●
Eine Variablendeklaration besteht aus
●
dem Datentyp (z.B. int, long, oder double)
●
dem Namen
●
optional einer initialen Wertzuweisung
int x;
// x hat Standardwert 0
long y = 17;
●
●
Durch eine Deklaration wird Speicherplatz für genau
einen Wert dieses Typs reserviert
In Programmen sind Variablen Namen für einen
Speicherplatz
11
Zuweisungen
●
●
Der Wert einer Variable kann durch eine
Zuweisung (=) verändert werden
Erst wird der Wert der rechten Seite berechnet und
dann der Variablen auf der linken Seite zugewiesen
int x = 17; // Deklaration & Zuweisung
x = 18;
// Erneute Zuweisung
int x = 19: // Fehler, Typ darf nicht
// erneut angegeben werden!
12
Datentypen
13
Ausdrücke
●
Ein Ausdruck ist ein Literal, eine Variable oder
eine Folge von Operationen auf
Literalen/Ausdrücken, die ein Ergebnis liefern
int x = 11;
// Deklaration
17
// Ausdruck: Literal
x
// Ausdruck: Variable
x + 19
// Ausdruck: Operation
14
Einfache Ausgabe
●
Zur Ausgabe beliebiger Werte auf der
Standardausgabe (System.out) gibt es in Java
die Methoden:
// Wert von <Ausdruck> ausgeben
System.out.print(<Ausdruck>)
// Wert von <Ausdruck> gefolgt von
// einem Zeilenumbruch ausgeben
System.out.println(<Ausdruck>)
15
Operationen auf Zahlen
●
Auf allen Zahlentypen definiert: Addition,
Subtraktion, Multiplikation und Division
17 + 4
// 21 (int)
17 + 4l
// 21l (long)
11 – 21
// -10 (int)
3 * 10
// 30 (int)
10 / 3
// 3 (int, Ganzzahldivision)
10.0 / 3
// 3.33333333333335 (double)
16
Operationen auf Zahlen
●
Auf Zahlen (int, long, double) definiert:
Rest einer Division (Modulo)
17 % 4
// 1 (int)
-4 % 3
// -1 (int)
18 % 4l
// 2 (long)
-18l % 4
// -2 (long)
18.5 % 4
// 2.5 (double)
-16.5 % 2.5
// -1.5 (double)
17
Automatische Konvertierung
●
●
Der „größte“ Zahlentyp in einem Ausdruck
bestimmt den Typ des Wertes
Regel: double > long > int
1 + 1
// int + int => int
1 + 1l
// int + long => long
1.0 + 1
// double + int => double
3 / 2
// int / int => int
3.0 / 2
// double / int => double
18
Demo: ZahlOps.java
●
Aufgabe: Lasst uns ein Programm
schreiben, das
●
●
●
jeweils 2 Variablen der Typen int, long und
double definiert
für verschiedene Kombinationen der
Variablen die Zahlenoperationen benutzt
die Werte der Ausdrücke auf der Konsole
ausgibt
19
Operationen auf Zeichenketten
●
Auf Zeichenketten (String) definiert:
Verkettung (Konkatenation)
"Hallo" + " Welt"
●
// "Hallo Welt"
Werte anderer Typen werden automatisch
in String konvertiert
"Bitte " + 3 + " Bier!" // "Bitte 3 Bier"
20
Operationen auf
Wahrheitswerten
●
Für Wahrheitswerte (boolean) definiert:
NOT (!), AND (&&) und OR (||)
// NOT:
!true // false
!false // true
21
Vergleichsoperationen
●
Für alle Zahlen definiert, liefern einen
Wahrheitswert (boolean):
22
Vergleichsoperationen für
Strings
●
●
Vergleich zweier Zeichenketten:
●
“Hallo“.equals(“Hallo“)
==> true
●
“hallo“.equals(“Hallo“)
==> false
Vergleich ohne Berücksichtigung der
Groß-/Kleinschreibung
●
“Hallo“.equalsIgnoreCase(“Hallo“)
==> true
●
“hallo“.equalsIgnoreCase(“Hallo“)
==> true
●
“hi!“.equalsIgnoreCase(“Hallo“)
==> false
23
Nochmal Zuweisungen & Ausdrücke
●
●
Der Ausdruck auf der rechten Seite einer
Zuweisung darf die Variable der linken
Seite enthalten
Der Ausdruck wird dann mit dem
aktuellen (alten) Wert berechnet und
danach als neuer Wert zugewiesen
x = 2;
x = x * x; // x = 2 * 2
24
Zuweisungskurzformen
int x = 10;
x += 5;
// x = x + 5: ?
x -= 7;
// x = x – 7: ?
x *= 2;
// x = x * 2: ?
x /= 2;
// x = x / 2: ?
x++;
// x = x + 1: ?
x--;
// x = x – 1: ?
25
Demo: ZahlOps.java
●
Aufgabe: Lasst uns ZahlOps.java
erweitern, um
●
Operationen auf Zeichenketten
●
Operationen auf Wahrheitswerten
●
Vergleichsoperationen
●
Zuweisungskurzformen
26
Operatorpräzedenzen
●
●
●
Java kennt die üblichen Rechenregeln wie
“Punkt- vor Strichrechnung”
Die Auswertung von binären Operatoren ist
linksassoziativ (von links nach rechts)
Ratschlag: Macht trotzdem durch
Klammerung die Reihenfolge deutlich
1 + 2 * 3
// 1 + (2 * 3) ==> 7
2 * 2 – 9 / –3
// (2 * 2) – (9 / –3)
// ==> 7
27
Ein- und Ausgabe mit JConsole
●
JConsole ermöglich die einfache Ein- und Ausgabe von Zahlen und
Strings:
// JConsole starten
JConsole.start();
// Eingabe (Benutzer fragen)
int i = JConsole.readInt(“Ein int: “);
long l = JConsole.readLong(“Ein long: “);
double d = JConsole.readDouble(“Ein double: “);
String s = JConsole.readString(“Ein String: “);
// Ausgabe
System.out.println(“i = “ + i + “, l = “ + l
“, d = “ + d + “, s = “ + s);
28
Demo: Greeting.java
●
●
Aufgabe: Lasst uns ein Programm
schreiben, welches
●
den Benutzer nach seinem Namen fragt
●
und ihn dann persönlich begrüßt
Vorüberlegung: EVA
●
Was ist die Eingabe?
●
Wie erfolgt die Verarbeitung?
●
Was ist die gewünschte Ausgabe?
29
Mathematische Funktionen
●
Die in Java enthaltene Klasse Math enthält
mathematische Konstanten und viele Funktionen
Math.PI
// Approx. PI
Math.E
// Approx. e (Basis des nat. Log.)
Math.sqrt(9)
// Wurzel: 3.0
Math.round(1.5)
// Runden: 2
Math.round(1.49) // Runden: 1
Math.pow(2, 3)
// Exponent: 8
Math.abs(-18)
// Absolutwert: 18
30
Methoden-Signaturen lesen
●
Eine Methoden-Signatur legt
●
den Datentyp des Ausgabewerts (A),
●
den Methodennamen (N)
●
und die Datentypen der Eingabewerte (E) fest:
// A: double, N: sqrt, E: double
double sqrt(double a)
// A: double, N: pow, E: double, double
double pow(double a, double b)
31
Demo: Pythagoras.java
●
Aufgabe: Lasst uns ein
Programm schreiben, welches
●
●
die Länge der Katheten a und b
vom Benutzer abfragt und dann
die Länge der Hypotenuse
berechnet und ausgibt
2
2
2
a + b =c
2
2
⇒ c=√ a + b
32
Demo: QuadGleichung.java
●
Aufgabe: Lasst uns ein Programm schreiben,
welches eine quadratische Gleichung löst.
(Nullstellenbestimmung der Parabel)
2
ax + bx+ c=0, (a≠0)
Lösung mit p−q−Formel :
b
c
x + px+ q=0, p= , q=
a
a
2
p
p
x=− ±√ D , D=( ) −q
2
2
2
33
Demo: QuadGleichung.java
●
Eine quadratische Gleichung kann zwei,
eine, oder gar keine reelle Lösung haben,
je nach Wert der Diskriminante D.
●
Statt
●
brauchen wir:
tue dies
tue das
tue jenes
2 Lsg.
...
berechne D
eine Lsg.
keine Lsg.
34
Verzweigungen
●
Für Fallunterscheidungen gibt es die ifAnweisung:
if (<Test-Ausdruck>) {
// Anweisungen für true
} else {
// Anweisungen für false
// (der else-Teil ist optional)
}
35
Verzweigungen
●
Beispiel: Was wird ausgegeben?
if (1 < 2) {
System.out.println("Math works!");
} else {
System.out.println("Math broken!");
}
36
Verzweigungen
●
Beispiel: Was wird ausgegeben?
if ((1 >= 2) || (7 % 4 == 3)) {
System.out.println("Ja!");
} else {
System.out.println("Nein!");
}
37
Verzweigungen
●
Beispiel: Was wird ausgegeben?
if (!((9 <= 10) && (8 > 4))) {
System.out.println("Ja!");
}
System.out.println("Fertig");
38
Blöcke
●
●
Eine von { } eingeschlossene Sequenz von
Anweisungen bezeichnet man als einen Block
Variablen, die in einen Block deklariert wurden,
sind nur in diesem Block sichtbar
int x = 10; int y = 5;
if (x > y) {
int z = x + y;
}
System.out.println(z); // Fehler!
39
Demo: QuadGleichung.java
●
Aufgabe: Lasst uns ein Programm schreiben,
welches eine quadratische Gleichung löst.
(Nullstellenbestimmung der Parabel)
2
ax + bx+ c=0, (a≠0)
Lösung mit p−q−Formel :
b
c
x + px+ q=0, p= , q=
a
a
2
p
p
x=− ±√ D , D=( ) −q
2
2
2
40
Fehler & Fallstricke
●
Viele Fehler im Programm werden schon
beim Kompilieren gefunden und in Eclipse
rot unterkringelt
●
●
Syntaxfehler, Datentypfehler, etc.
Wenn man mit der Maus auf die
Unterkringelung zeigt, dann wird eine
genaue Fehlermeldung angezeigt
41
Syntaxfehler
●
<something> cannot be resolved
●
Ihr versucht auf eine nicht deklarierte
Variable, Klasse oder Methode zuzugreifen
int x1 = 10, x2 = 20;
x = x1 + x2;
42
Syntaxfehler
●
Duplicate variable <something>
●
Ihr versucht eine schon existierende Variable
nochmal zu deklarieren
int x1 = 10, x2 = 20;
int x1 = x1 + x2;
43
Typfehler
●
The operator <x> is undefned for the
argument type(s) boolean, int
●
Ihr wendet einen Operator auf falsche Typen
an
int a = 10, b = 20, c = 30;
if (a < b < c) {
// irgendwas
}
44
Typfehler
●
Type mismatch: cannot convert from <x> to <y>
●
●
In einer Zuweisung ist der Typ der Variable (x) „kleiner“ als
der des Werts des zugewiesenen Ausdrucks
Ihr verwendet eine Zuweisung (=) und wollt eigentlich
einen Vergleich (==) machen
long a = 1;
int b = a + 1;
if (a = 2) {
;; irgendwas
}
45
„Böse“ Fehler
●
Manche Fehler werden nicht vom
Compiler erkannt, sondern sie drücken
sich nur in (aus Sicht des
Programmierers) falschen Ergebnissen
aus
●
●
Ohne Erfahrung schwer zu finden
Z.B. Typkonvertierungen, Überläufe,
Rundungsfehler
46
Demo: BoeseFehler.java
●
●
●
Bei Zuweisungen wird zuerst der Wert des
Ausdrucks auf der rechten Seite
berechnet und erst danach der Variable
auf der linken Seite zugewiesen und ggf.
konvertiert
Zahlen können nicht beliebig groß sein:
siehe auch BigInteger, BigDecimal
Gleitkommazahlen sind nicht immer
genau
47
Herunterladen