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