Einführung in Java

Werbung
Einführung in Java
Silke Trißl, Prof. Ulf Leser
Wissensmanagement in der Bioinformatik
Ein kurzes Java Tutorial
Programmiersprache Java
– Einfach zu erlernen
Einfache Syntax
– Platform-unabhängig
Linux, Unix, Windows, Macintosh, …
– Objekt-orientiert
Kann aus Bausteinen zusammengesetzt werden
– verfügt über Vielzahl von Laufzeitbibliotheken
andere Programmierer haben häufige Probleme schon gelöst
– Interpretiert
muß vor Ausführung kompiliert werden
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
2
1
Java und how to start
Java zum Herunterladen
– http://java.sun.com/j2se/1.4/
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
3
Java Grundstruktur
// Klassenname.java
public class Klassenname {
// Ausführbare Klasse (Hauptprogramm)
public static void main (String [] args) {
Programmanweisungen
}
}
Alle Anweisungen müssen innerhalb einer Klasse
stehen
Klassen sind die Bausteine, aus denen JavaAnwendungen aufgebaut sind.
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
4
2
Programme kompilieren und ausführen
public class Hallo_Welt {
public static void main (String [] args) {
System.out.println("Hallo Welt");
}
}
javac Hallo_Welt.java
Hallo_Welt.class
Hallo_Welt.java
java Hallo_Welt
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
5
Java
Syntax
– Variablen und Klassennamen müssen mit einem
Buchstaben beginnen
– Sonderzeichen (@, +, #, ...) und reservierte Java-Wörter
(if, class, ...) sind nicht erlaubt
– Elementare Anweisungen werden immer durch ein
Semikolon abgeschlossen
Konventionen
– Aussagekräftige Variablennamen verwenden
– Variablennamen beginnen mit Kleinbuchstaben,
Klassennamen mit Großbuchstaben
– Groß- / und Kleinschreibung beachten
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
6
3
Kommentare
Einzeilig
a = 5;
// dies ist ein Kommentar
// bis zum Ende jeder Zeile
Mehrere Zeilen
/* Hier kann man einen
Kommentar über
mehrere Zeilen einfügen
a = 5;
alles wird ignoriert */
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
7
Hallo Welt
Einfachstes Programm: Hallo_Welt.java
// Hallo_Welt.java
public class Hallo_Welt {
public static void main (String [] args) {
System.out.println("Hallo Welt");
}
}
System.out.println()
System.out.print()
String + neue Zeile
String ohne neue Zeile
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
8
4
Variablendeklaration
Alle verwendeten Variablen in Java müssen vor
der ersten Nutzung deklariert werden
Datentyp - Ganzzahl
–
int
–
short
–
long
–
byte
4
2
8
1
Byte
Byte
Byte
Byte
232 Zahlen
216 Zahlen
264 Zahlen
28 Zahlen
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
9
Variablendeklaration - cont. Datentyp - Gleitkommazahlen
–
float
4 Byte
± 3,4 *1038 (6 bis 7 sign. Nachkommast.)
–
double
8 Byte
± 1,8 * 10308 (15 sign. Nachkommast.)
Weitere Datentypen
–
char
–
boolean
1 Zeichen
/ false
true
Sonderfall (als vordefinierte Klasse):
–
String
Zeichenketten
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
10
5
Variablendeklaration - Beispiele Allgemein
Datentyp variablenname = Ausdruck;
Beispiele
double gehalt;
// Deklaration
int freieTage = 15;
// Initialisierung
long erdbevoelkerung;
char jaZeichen;
boolean fertig;
String adresse;
jaZeichen = 'j';
fertig = true;
// Zuweisung
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
11
Konstanten
In Java bezeichnet man eine Konstante mit dem
Schlüsselwort final.
final double CM_PER_INCH = 2.54;
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
12
6
Operatoren
Addition, Subtraktion, Multiplikation und Division
+, -, *, / (% für Modulo)
int n = 5;
int a = 2 * n;
// a ist 10
int b = 15 / 2;
int c = 15 % 2;
double d = 15.0 / 2.0;
// b ist 7
// c ist 1
// d ist 7.5
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
13
Kurzschreibweisen
binäre arithmetische Operatoren
int x = 0;
x = x + 4;
// gleichbedeutend mit x += 4;
Inkrementieren und Dekrementieren
int i = 0;
i = i + 1;
int n = 0;
int a = n++;
a = n--;
// gleichbedeutend mit i++;
// Vorsicht: gibt auch ++i;
// a = 0; Test mit ++n;
// dekrementieren
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
14
7
Relationale und boolesche Operatoren
Gleichheitstest
3 == 7
// false
Ungleichheit
3 != 7
3 <= 7
3 > 7
// true
// true
// false
Logisch und (&&) und Logisch oder (||)
(x != 0) && (1/x > 0) // beide müssen true sein
(a == 5) || (b <= 7) // eine muß true sein
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
15
Anwendungen - Debug und Breakpoints
Debug
– Laufzeitfehler aufspüren
Endlosschleifen
Zugriff auf Position n+x eines Strings oder Arrays der Länge n
...
Breakpoint
– Setzen in Eclipse: Doppelklick links neben dem Text (Bild
folgt)
– Code wird bis zum Breakpoint ausgeführt
Step over
Step into
arbeitet nächste Anweisung ab
geht in eine Methode oder Klasse
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
16
8
Breakpoint setzen
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
17
Debugging starten
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
18
9
Debug - Ansicht
Stoppe das
Programm
Variablen, die an
diesem Punkt bekannt
sind
Step into
Step over
Gehe bis zum nächsten
Breakpoint
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
19
Debug - Step over
Variablen ändern sich
über den
Programmverlauf
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
20
10
Bedienungsanweisungen - if ... else Allgemeiner Aufbau:
if ( boolean_expression )
statement(s)_1
}
else {
statement(s)_2
}
{
Der boolesche Ausdruck wird ausgewertet.
– Falls true: statement_1 wird ausgeführt
– Falls false: statement_2 wird ausgeführt
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
21
Flußdiagramm - if ... else -
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
22
11
Aufgabe: if ... else
1. Schreibt eine Anwendung, die den Satz "weiter
so" ausgibt, wenn der Umsatz des Angestellten
größer ist als der Sollumsatz.
– natürlich ist auch die Konstruktion
if (Bedingung)
else if (Bedingung)
else
{
{
{
...
...
...
}
}
}
2. Damit können wir eine gestaffelte Ausgabe
einführen
–
–
–
–
Umsatz
Umsatz
Umsatz
Umsatz
> 2 * Sollumsatz:
> 1,5 * Sollumsatz:
≥ Sollumsatz:
< Sollumsatz:
Ausgezeichnet
Gut
Na ja
Gefeuert!
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
23
Übergabe von Argumenten an das
Hauptprogramm
Übergabe von Zeichenketten an das Programm über
den args - Parameter
In der Befehlszeile:
> javac Klassenname.java
> java Klassenname argument1 argument2 argument3 …
Parameter werden an das Hauptprogramm
übergeben
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
24
12
Beispiel
...
public static void main(String[] args) {
// Einlesen der Argumente
String argument1;
int value1;
double value2;
argument1 = args[0];
value1 = Integer.parseInt(argument1);
value2 = Double.parseDouble(args[1]);
}
...
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
25
Befehlszeile in Eclipse
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
26
13
Befehlszeile in Eclipse - cont.
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
27
Strings
vordefinierte Klasse 'String'
String e = "";
// ein leerer String
String hallo = "Hallo";
Verknüpfung von Strings mit '+'
String name = "Student";
String message = hallo + " " + name;
int stud_nummer = 3;
System.out.println(message + stud_nummer);
// int stud_nummer wird zu String konvertiert
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
28
14
Teilstrings
m Buchstaben eines Strings ab Position n
ausgeben
– 1. Buchstabe im Wort hat den Positionswert 0
int n = 0; int m = 4;
String hallo = "Hallo";
String s = hallo.substring(n,m);
// ergibt Hall
Buchstabe n eines Strings ausgeben
int n = 3;
String hallo = "Hallo";
char c = hallo.charAt(n);
// liefert l
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
29
Länge
Länge eines Strings
String hallo = "Hallo";
int n = hallo.length();
// Ergebnis ist 5
Strings auf Gleichheit testen
String hallo = "Hallo";
String hi = "hallo";
boolean greet = hallo.equals(hi);
greet = hallo.equalsIgnoreCase(hi);
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
// false
// true
30
15
Bestimmte Schleifen - for Allgemeiner Aufbau
for ( Anfang; Bedingung; Iteration )
statement(s)
}
{
Beispiel
System.out.println("Alle geraden Zahlen bis 10:");
for ( int i = 0; i < 10; i += 2) {
System.out.print(i + " ");
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
31
Beispiel - for Wir wollen für einen bestimmten Zeitraum jedes
Jahr Geld einzahlen und den Saldo am Ende des
Jahres erfahren
for ( int jahre = 1; jahre <= n; jahre++ ) {
saldo += zahlung;
double zins = saldo * zinsSatz / 100;
saldo += zins;
System.out.println("Saldo nach Jahr " + jahre
+ " beträgt " + saldo);
}
System.out.println("Saldo am Ende der Laufzeit: "
+ saldo);
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
32
16
break - Anweisung
Ermöglicht den Sprung aus einer Schleife
– Beispiel: wie eben, aber wenn der Saldo einen gewissen
Betrag erreicht hat, wollen wir aufhören
for ( int jahre = 1; jahre <= n; jahre++ ) {
saldo += zahlung;
double zins = saldo * zinsSatz / 100;
saldo += zins;
if ( saldo > ziel ) break;
System.out.println("Saldo nach Jahr " + jahre
+ " beträgt " + saldo);
}
System.out.println("Saldo am Ende der Laufzeit: "
+ saldo);
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
33
Aufgabe: for
1. Schreibt eine Anwendung, mit der alle Vorkommen
eines bestimmten Buchstabens in einem String
gezählt werden.
Hint: Dazu müsst ihr jeden Buchstaben ansehen, mit der
Vorgabe vergleichen und wenn sie gleich sind, dann die Zahl
der Vorkommen erhöhen.
Beispiel:
– 'a' kommt in dem String 'abbabeatles' 3 mal vor
2. Der wenn der gesuchte Buchstabe mindestens 3 mal
vorkommt, soll “Hat 3 oder mehr Vorkommen”
ausgegeben werden.
Hint: mit break-Anweisung
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
34
17
Schleifenkonstrukte - while Wiederholung von Anweisungen
Allgemeiner Aufbau (Prüfung am Anfang):
while ( boolean_expression )
statement(s)
}
{
Der boolesche Ausdruck wird ausgewertet.
– Falls true: statement(s) werden ausgeführt,
anschließend der boolsche Ausdruck nochmals geprüft.
– Falls false: keine Anweisung wird ausgeführt.
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
35
Flußdiagramm - while Flußdiagramm für eine Schleife mit Prüfung am
Anfang
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
36
18
Beispiel - while Wie lange dauert es, einen bestimmten
Geldbetrag anzusparen, wenn man einen Zinssatz
pro Jahr annimmt und jedes Jahr den gleichen
Geldbetrag deponiert?
while (saldo < ziel) {
saldo += zahlung;
double zins = saldo * zinsSatz / 100;
saldo += zins;
jahre++;
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
37
Schleifenkonstrukte - do ... while Allgemeiner Aufbau (Prüfung am Ende):
do
{
statement(s)
}
while ( boolean_expression );
do-Anweisung wird immer erst einmal ausgeführt.
Der boolesche Ausdruck wird ausgewertet.
– Falls true: die gesamte do-Anweisung wird noch einmal
ausgeführt.
– Falls false: keine weitere Anweisung wird ausgeführt.
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
38
19
Flußdiagramm - do ... while Flußdiagramm für eine Schleife mit Prüfung am
Ende
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
39
Beispiel - do ... while Gleiches Problem wie vorhin, nur der Nutzer soll
entscheiden, ob er weiter sparen will.
do
{
saldo += zahlung;
double zins = saldo * zinsSatz / 100;
saldo += zins;
jahre++;
System.out.println("Der Saldo ist " + saldo);
// fragen, ob weiter sparen, und Eingabe holen
}
while (input.equals("Y"));
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
40
20
Vergleich - for - while - do ... while
bestimmte Anzahl
Einlesen bis EOF
Einlesen bis !ok
for
for(i=0; i<END; i++){
statements;
}
for(i=0; i!=EOF; i++){
in.read();
}
readUser();
for (i=0; !ok; i++) {
readUser(); }
while
i = 0;
while (i<END) {
statements;
i++;
}
while (!EOF) {
in.read(); }
readUser();
while ( ok ) {
readUser();
i = 0;
if (i<END) {
do
{
statements;
i++;
}
while (i<END);
if (!EOF) {
do {
in.read();
while (!EOF);
do ...
while
do
}
}
{
readUser();
while ( ok );
}
}
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2004/05
41
21
Herunterladen