Einführung in Java

Werbung
Einführung in Java
Silke Trißl
Wissensmanagement in der Bioinformatik
Ein kurzes Java Tutorial
n
Programmiersprache Java
– Einfach zu erlernen
n
Einfache Syntax
– Platform-unabhängig
n
Linux, Unix, Windows, Macintosh, …
– Objekt-orientiert
n
Kann aus Bausteinen zusammengesetzt werden
– verfügt über Vielzahl von Laufzeitbibliotheken
n
andere Programmierer haben häufige Probleme schon gelöst
– Interpretiert
n
muß vor Ausführung kompiliert werden
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
2
1
Java und how to start
n
Java zum Herunterladen
– http://java.sun.com/j2se/1.5/
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
3
Java Grundstruktur
// Klassenname.java
public class Klassenname {
// Ausführbare Klasse (Hauptprogramm)
public static void main (String [] args) {
Programmanweisungen
}
}
n
n
Alle Anweisungen müssen innerhalb einer Klasse
stehen
Klassen sind die Bausteine, aus denen Java
Anwendungen aufgebaut sind.
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
4
2
Programme kompilieren und ausführen
public class Hallo_Welt {
public static void main (String [] args) {
System.out.println("Hello World");
}
}
javac Hallo_Welt.java
Hallo_Welt.class
Hallo_Welt.java
java Hallo_Welt
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
5
Java
n
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
n
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 2006/07
6
3
Kommentare
n
Einzeilig
a = 5;
n
// 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 2006/07
7
Hallo Welt
n
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 2006/07
8
4
Variablendeklaration
n
n
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 2006/07
9
Variablendeklaration - cont. n
n
n
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
true / false
Sonderfall (als vordefinierte Klasse):
–
String
Zeichenketten
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
10
5
Variablendeklaration - Beispiele n
Allgemein
Datentyp variablenname = Ausdruck;
n
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 2006/07
11
Konstanten
n
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 2006/07
12
6
Operatoren
n
n
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 2006/07
13
Kurzschreibweisen
n
binäre arithmetische Operatoren
int x = 0;
x = x + 4;
n
// 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 2006/07
14
7
Relationale und boolesche Operatoren
n
Gleichheitstest
3 == 7
n
Ungleichheit
3 != 7
3 <= 7
3 > 7
n
// false
// 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 2006/07
15
Bedienungsanweisungen - if ... else n
Allgemeiner Aufbau:
if ( boolean_expression )
statement(s)_1
}
else {
statement(s)_2
}
n
{
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 2006/07
16
8
Flußdiagramm - if ... else -
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
17
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:
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
Ausgezeichnet
Gut
Na ja
Gefeuert!
18
9
Tastatureingaben
n
Eingaben von Strings, Zahlenwerten, ... von der
Tastatur
– mit der Methode 'prompt()'
– immer als String
– muss zum richtigen Datentyp umgewandelt werden
...
public static void main(String[] args) {
// Einlesen der Argumente
String eingabe;
eingabe = prompt("Gib einen Wert ein");
}
...
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
Methode prompt()
import java.io.*;
19
Importieren der
notwendigen Bibliothek
- vor public class
public class Einlesen {
public static void main(String[] args) {
...
eingabe = prompt("Gib einen Wert ein");
}
Methodenaufruf mit
Argument(en)
public static String prompt(String frage) {
System.out.print(frage+” “);
byte [] buffer = new byte [255];
try {
System.in.read(buffer, 0, 255);
} catch ( IOException e ) {
System.out.println(e.getMessage());
}
return new String(buffer);
Methode
Versuche einzulesen,
wenn es nicht klappt gib
die Fehlermeldung aus
}
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
20
10
Umwandeln
n
von String zu int oder double
...
public static void main(String[] args) {
// Einlesen der Argumente
String eingabe;
int value1;
double value2;
eingabe = prompt("Gib einen Wert ein");
value1 = Integer.parseInt(eingabe);
// zu int
value2 = Double.parseDouble(eingabe);
// zu double
}
...
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
21
Fehlerhandling
n
Es können Fehler beim Umwandeln eines Strings in
einen anderen Datentypen auftreten
– String ist wirklich ein String und keine Zahl
– ',' anstelle von '.' in reellen Zahlen
– ...
n
Exception muss abgefangen werden
...
eingabe = prompt("Gib einen Wert ein");
try {
value1 = Integer.parseInt(eingabe);
// zu int
} catch (NumberFormatException ne) {
System.out.println("War keine Zahl " + ne.getMessage());
}
...
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
22
11
Strings
n
vordefinierte Klasse 'String'
String e = "";
// ein leerer String
String hallo = "Hallo";
n
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 2006/07
23
Teilstrings
n
m Buchstaben eines Strings ab Position n
ausgeben
– 1. Buchstabe im Wort hat den Positionswert 0
int n = 1; int m = 4;
String hallo = "Hallo";
String s = hallo.substring(n,m);
n
// ergibt all
Buchstabe n eines Strings ausgeben
int n = 3;
String hallo = "Hallo";
char c = hallo.charAt(n);
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
// liefert l
24
12
Länge
n
Länge eines Strings
String hallo = "Hallo";
int n = hallo.length();
n
// Ergebnis ist 5
Strings auf Gleichheit testen
String hallo = "Hallo";
String hi = "hallo";
boolean greet = hallo.equals(hi);
greet = hallo.equalsIgnoreCase(hi);
// false
// true
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
25
Bestimmte Schleifen - for n
Allgemeiner Aufbau
for ( Anfang; Bedingung; Iteration )
statement(s)
}
n
{
Beispiel
System.out.println("Alle geraden Zahlen bis 10:");
for ( int i = 0; i < 11; i += 2) {
System.out.print(i + " ");
}
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
26
13
Beispiel - for n
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 2006/07
27
break - Anweisung
n
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 2006/07
28
14
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.
n
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 2006/07
29
Anwendungen - Debug und Breakpoints
n
Debug
– Laufzeitfehler aufspüren
n
n
n
n
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
n
n
Step over
Step into
arbeitet nächste Anweisung ab
geht in eine Methode oder Klasse
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
30
15
Breakpoint setzen
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
31
Debugging starten
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
32
16
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 2006/07
33
Debug - Step over
Variablen ändern sich
über den
Programmverlauf
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
34
17
Schleifenkonstrukte - while n
n
Wiederholung von Anweisungen
Allgemeiner Aufbau (Prüfung am Anfang):
while ( boolean_expression )
statement(s)
}
n
{
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 2006/07
35
Flußdiagramm - while n
Flußdiagramm für eine Schleife mit Prüfung am
Anfang
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
36
18
Beispiel - while n
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 2006/07
37
Schleifenkonstrukte - do ... while n
Allgemeiner Aufbau (Prüfung am Ende):
do
{
statement(s)
}
while ( boolean_expression );
n
n
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 2006/07
38
19
Flußdiagramm - do ... while n
Flußdiagramm für eine Schleife mit Prüfung am
Ende
Silke Trißl: Bioinformatik für Biophysiker, WS 2006/07
39
Beispiel - do ... while n
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 2006/07
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 2006/07
41
21
Herunterladen