Die Funktionen print() und println() Die Funktion System.out.printf() Format eines Funktionsaufrufs funktionsname(); Innerhalb der Klammern können Argumente angegeben werden Die Funktion kann ein Ergebnis zurückliefern Bildschirmausgaben Standardausgaben System.out.print(String s); System.out.println(String s); Fehlerausgaben System.err.print(String s); System.err.println(String s); class Ausgaben public static void main(string a[]) System.out.println("H2O"); System.out.print("H2"); System.out.println("O"); System.out.println(); System.out.println(17); System.out.println(17.4); System.err.println("Fehler"); H2O H2O 17 17.4 Fehler Ab J2SE 5.0 Unterstützung formatierter Bildschirmausgaben Standardausgaben System.out.printf(String format, Object... objects); Fehlerausgaben System.err.printf(String format, Object... objects); Weitere Format-Einzelheiten in der Doku zu java.util.formatter class AusgabenNeu public static void main(string a[]) System.out.printf(">%12d<\n",100); System.out.printf(">%12.2f<\n",100.0); System.out.printf(">%12.2e<\n",100.0); System.out.printf(">%012.2f<\n",0.1); System.out.printf(">%d %f<\n",100, 0.1); System.out.printf(">%2$f %1$d<\n",100, 0.1); > 100< > 100,00< > 1.00e+02< >000000000,10< >100 0,100000< >0,100000 100< 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 1 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 2 Wahrheiswerte (Boolesche Variable) Boolesche Ausdrücke Vergleiche von Zahlen liefern die Wahrheitswerte wahr oder falsch Zur Darstellung von Wahrheitswerten dient der primitive Datentyp boolean mit dem Wertebereich:, Logische Operatoren für boolesche Variablen Und (&&) Oder ( ) && Exklusives Oder (^) Nicht (!) ^! =! = Vergleichs- Operatoren in Java == (gleich)!= (ungleich) < (kleiner) <= (kleiner gleich) > (größer) >= (größer gleich) liefern boolesche Werte Diese können wiederum mit == (gleich)!= (ungleich) verglichen werden 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 3 Mit den Operatoren und Klammern können Boolesche Ausdrücke gebildet werden boolean angemeldet, bezahlt, storniert, zahlungspflichtig; angemeldet = ; bezahlt = ; storniert = ; zahlungspflichtig = angemeldet &&!(bezahlt storniert); Booleschen Variablen können Vergleichsaussagen von Variablen zugewiesen werden float gemessenerdruck = 1.0f, maximaldruck = 18.8f; int zufluss = 2, abfluss = 3; boolean ueberdruck, unkritisch; ueberdruck = gemessenerdruck > maximaldruck; unkritisch =!ueberdruck && gemessenerdruck < 1.2f*maximalDruck && zufluss <= abfluss 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 4
Prioritäten der Operatoren 1. Unäre Operatoren +, -,! 2. Multiplikative Operatoren (Punktrechnung) *, /, % 3. Additive Operatoren (Strichrechnung) +, - 4. Vergleiche ==,!=, <, >, <=, >= 5. Exklusive Oder Verknüpfung ^ 6. Und Verknüpfung && 7. Oder Verknüpfung Klammerung geht immer vor! class BooleExample public static void main(string a[]) System.out.printf(">%12b<\n", && ^ ); System.out.printf(">%12b<\n", ( && ) ^ ); System.out.printf(">%12b<\n", && ( ^ )); > < > < > < Der Fragezeichen-Operator (?:) Einziger dreistelliger Operator in Java Erwartet einen logischen (booleschen) Ausdruck a zwei weitere Ausdrücke b, c Numerische Typen Referenztypen Auswertung Vom Typ boolean Auswertung des logischen Operators Ist er wahr wird der erste der beiden anderen Operanden ausgewertet Ist er nicht wahr wird der zweite der beiden anderen Operanden ausgewertet Typ des Rückgabewertes Ergebnis des Ausdrucks wahr a? b : c falsch b, wenn a wahr c, wenn a falsch Entspricht dem Typ des größeren der beiden Ausdrücke b und c 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 5 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 6 Zeichen Zeichen Zur Darstellung von Zeichen dient der primitive Datentyp char (vom engl. character) Wertebereich char c; Groß- und Kleinbuchstaben, Ziffern, Satzzeichen, Rechenzeichen, Sonderzeichen, Steuerzeichen Steuer- und Hilfszeichen können durch Voranstellung von \ dargestellt werden \n (Zeilenvorschub), \t (Tabulator), \f (Seitenvorschub) \ ( steht für ), \\ (steht für \), \ (steht für ) Vergleichsoperatoren ==,!=, <, <=, >, >= sind definiert Alphabetische Reihenfolge Reihenfolge des Unicodes Alle Zeichen werden in einfache hochgestellte Anführungszeichen eingeschlossen a, Ä, @,, -, +, 7 7 besitzt keinen Zahlenwert! Java verwendet Unicode zur internen Repräsentation von Zeichen Es können 2 16 =65536 verschiedene Zeichen dargestellt werden class CharExample public static void main(string args[]) char rund= (, eckig= [, geschweift= ; boolean x, y; x = rund < geschweift; y = eckig == geschweift; System.out.printf(">%6b%6b<\n", x, y); > < 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 7 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 8
Zeichenketten (Strings) Vergleich von Zeichenketten (Strings) Zur Darstellung von Zeichenketten (Folge von Zeichen) dient der (primitive) Datentyp String Zeichenketten werden, in doppelte Hochkommata eingeschlossen Hello World Zeichenketten können mit dem Operator + konkateniert werden String a = Hallo, b= Welt ; String c = a+b; System.out.println(c); Zeichenketten können auf zwei verschiedene Arten deklariert und initialisiert werden String a = Hallo ; String b = new String( Hallo ); Zeichenketten können durch == und!= verglichen werden String a = merkwürdig, b= merkwürdig, c = new String( merkwürdig ), d = new String( merkwürdig ); System.out.println(a + + (a==b)); System.out.println(c + + (c==d)); Achtung!!! Die Vergleiche <, <=, >, >= sind für Strings nicht zulässig merkwürdig merkwürdig 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 9 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 10 Initalisierung von Variablen Strenges Typsystem Bei der Deklaration einer Variablen kann man bereits einen Anfangswert (eine Initialisierung) angeben int x = 10; Bei der Deklaration mehrerer Variablen kann jede einzelne einen Wert zugewiesen bekommen int x = 10, y =20; Eine Variable muß einen Wert haben, bevor man sie verwendet int x =10, y; System.out.println( Summe: +x+y); Fehlermeldung vom Compiler: variable y might not have been initialized 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 11 Jede Variable besitzt einen eindeutigen Datentyp Festlegung der Art der gespeicherten Werte sowie der zulässigen Operatoren Strenges Typsystem erleichtert Erkennung von Programmierfehlern double x, y; y = x*3.14; y = x*; (Fehler) Operator legt Datentyp der Operanden fest! Im Allgemeinen mehrere Kombinationen von Datentypen zulässig Operator und Operanden-Datentyp legen Ergebnis-Datentyp fest Vergleichsoperatoren ==, <, >,!=,... liefern stets binäre Aussage vom Typ boolean 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 12
Typsystem Strenges Typsystem Anwendung von Operatoren auf unterschiedliche Datentypen y = 22 + 15.1; Was für ein Datentyp ist y? Implizite Datentyp-Anpassung Nicht zwischen beliebigen Datentypen möglich Nur in Richtung auf einen allgemeineren Datentyp hin byte short int long float double char boolean String Wird von Java-Unterprogramm tostring durchgeführt! Jeder primitive Datentyp kann als String wiedergegeben werden Mit Strings sind keine arithmetischen Berechnungen möglich 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 13 Manchmal ist Datentyp-Umwandlung mit großem Genauigkeitsverlust oder Bedeutungsänderung der Daten sinnvoll Abschneiden des Nachkomma-Anteils einer Gleitkommazahl Abbildung einer ganzen Zahl auf ein Zeichen mit entsprechendem Zahlencode Explizite Datentyp-Anpassung durch Voranstellen des gewünschten Datentyps in Klammern vor dem betreffenden Ausdruck int x=65; char y; y = (char) x; (y hat nun den Wert A ) 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 14 Explizite Datentyp-Anpassung Typkonversion (type cast) Was gibt folgendes Programmfragment aus? float x = 82.2f, y = 8.5f; int n = (int) (x/y); char a = (char) (int) x, b=(char) (a+1); System.out.println( gewandelt: +n+ +a+ +b); gewandelt: 9 R S Explizite Datentyp-Anpassung kann aus dem Wertebereich des Zieldatentypen herausführen (short) 100000 (liefert -31072) int i Datentyp-Anpassung (explizite und implizite) wird Typkonversion oder englisch type cast genannt Die (explizite) Datentyp-Anpassung von String zu Zahl ist nicht möglich! (int) 365 geht nicht! Abhilfe mit Funktionen geeigneter Wrapper-Klassen int ganzezahl = java.lang.integer.parseint( 365 ); (short) i 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 15 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 16
Kommentare Schachtelung von Kommentaren Anmerkungen (Kommentare) innerhalb eines Programms sind sehr wichtig (für IHR späteres Verständnis)! Erklären die Bedeutung von Variablen Erläutern den Sinn von Anweisungen Blenden Programmteile (zu Testzwecken) aus... Kommentare werden vom Compiler ignoriert Zwei Möglichkeiten für Kommentare Zeilenendkommentar: Beginnt mit //, endet mit der Zeile int sum; // sum of all input values Klammerkommentar: Beginn mit /*, endet mit */ /* The following programm computes the greatest common divisor of two variables x and y using the algorithm of Euklid */ In Java dürfen Klammerkommentare nicht geschachtelt werden /* A wrong comment example: /* Nested comments are not allowed */ // But this is allowed...*/ // And /* this is likewise permitted */ Empfehlungen Kommentieren, was nicht im Programm steht und wichtig ist Keine Kommentare, die nur wiederholen, was man ohnehin sofort aus dem Programmtext ablesen kann Ausführliche Kommentare besser am Anfang (im Kopf) als mitten im Programm Kommentare in derselben Sprache wie die Variablen-Namen im Programm: Am besten alles in Englisch! 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 17 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 18 Aufbau eines Javaprogramms Javadoc /**----------------------------------------------------------- * Organisation * Autor * Projekt, Auftrag * * Sinn und Zweck des Programms * * Getestet mit * Betriebssystem, Compilerversion *----------------------------------------------------------*/ public class NameIhresProgramms public static void main(string[] args) // Hier startet Ihr Programm... Deklarationen...... Anweisungen...... Kommentare Mittels Javadoc kann aus den Kommentaren im Quelltext automatisch eine HTML-Dokumentation erzeugt werden Javadoc Dokumentation unter (windows) http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/javadoc.html Beispiel /** Beispiel zu javadoc * * @author schwanecke * @version 1.0 */ public class JavadocExample /** * Startroutine des Programms * @param args Kommandozeilenparameter */ public static void main (String[] args) System.out.println( Hello World ); > javadoc javadocexample.java erzeugt: 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 19 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 20
Anweisungen Leere Anweisung Besteht lediglich aus einem Semikolon Hat keinen Einfluß auf den Programmablauf Block Zusammenfassung von Anweisungen, die nacheinander ausgeführt werden In einem Block (lokal) deklarierte Variablen sind nur dort sichtbar/gültig Variablen-Deklaration Sichtbarkeit von Deklaration bis zum Ende des umschließenden Blocks Ausdrucksanweisung Dienen zur Ausführung von Ausdrücken in einem Anweisungskontext Werden durch Anhängen eines Semikolons erzeugt ; Anweisung1... Typname Variablenname; Typname Variablenname = wert; Ausdruck; 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 21 Zuweisung (Anweisungen) Eine Zuweisung besteht aus einem Variablennamen einem Gleichheitszeichen variablenname = ausdruck; dem Ausdruck einem abschließenden Semikolon Zuweisungen werden folgendermaßen abgearbeitet 1. Seite links vom Gleichheitszeichen wird ausgeführt um die Variable zu bestimmen, der ein Wert zugewiesen werden soll 2. Seite rechts vom Gleichheitszeichen wird ausgeführt (der Wert des Ausdrucks berechnet) 3. Wert der rechten Seite wird der linken Seite zugewiesen Typkompatibilität notwendig Evtl. implizite Typkonvertierung Beispiele int a =1, b=2, c, d; a = 3 + 2 * (a + b); b = 7 - a/2; c = 3 * (d = a + b + 1); 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 22 Zuweisungen diagramm Zuweisung: Variable = Ausdruck Spezielle Kurznotation einer Zuweisung: Variable Operator = Ausdruck Steht abkürzend für Variable = Variable Operator ( Ausdruck ) a += 10; (kurz für a = a + 10;) b -= 12; (kurz für b = b - 12;) c *= 8; (kurz für c = c * 8;) d /= 15; (kurz für d = d / 15;) Zuweisungen = Einfache Zuweisung += Additionszuweisung -= Subtraktionzuweisung *= Multiplikationszuweisung /= Divisionszuweisung %= Modulozuweisung Klammerung beachten a = a * 3/2; a *= 3/2; (a=5 liefert 7) (a=5 liefert 5) Inkrementieren / Dekrementieren Spezielle Kurzschreibweisen für das Inkrementieren bzw. Dekrementieren einer Variablen mittels der Operatoren ++ bzw. --. a++; oder ++a; (steht für a += 1;) b--; oder --b; (steht für b -= 1;) Tritt einer dieser Operatoren in einer Zuweisung auf, gilt folgende Regel: Ist der Operator nachgestellt (z.b. a++), so wird der Wert nach Verwendung der Variablen geändert Ist der Operator vorgestellt (z.b. --b), so wird der Wert vor Verwendung der Variablen geändert int a =2, b =3; a *= b++; b += 19 / --a; (a hat den Wert 6) (b hat den Wert 7) 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 23 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 24
Bedingte Anweisung (Verzweigung) diagramm if ( Bedingung ) Anweisung Anweisung Bedingung ist ein Ausdruck, der einen Wert vom Typ boolean liefert Jede Anweisung ist durch ein Semikolon zu beenden Mehrere Anweisungen werden durch geschweifte Klammern zusammengefasst Bei Nichterfüllen der Bedingung können (optional) Anweisungen im else-zweig angegeben werden Ist ein else-zweig vorhanden, kann bedingte Anweisung als Verzweigung aufgefasst werden. Sind mehrere bedingte Anweisungen mit else-zweig ineinander verschachtelt, so wird ein else-zweig immer dem innersten if zugeordnet, zu dem es gemäß diagramm gehören kann 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 25 else Beispiele if (a ==1) b++; else if (a==2) b--; float Winkel = Eingabe(); if (Winkel >90.0f && Winkel <180.0f) System.out.println( Stumpfer Winkel ); Winkel = 180.0f -Winkel; if (Winkel < 90.0f) System.out.println( Spitzer Winkel ); else if (Winkel == 90.0f) System.out.println( Rechter Winkel ); else if (Winkel <180.0f) System.out.println( Stumpfer Winkel ); else if (Winkel == 180.0f) System.out.println( Gestreckter Winkel ); 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 26 Die switch-anweisung Für größere Fallunterscheidungen, bei denen alle Bedingungen nur vom Wert einer Variablen abhängen die Abhängigkeit ausschließlich durch Gleichheitsabfrage ausgedrückt werden kann gibt es die switch-anweisung diagramm switch ( ganzzahliger Ausdruck ) case ganzzahlige Konstante : Anweisung break ; default : Anweisung Beispiel (switch-anweisung) int days, month, ziffer; switch (month) case 1: // Januar case 3: // März case 5: // Mai case 7: // Juli case 8: // August case 10: // Oktober case 12: days = 31; // Dezember break; case 4: // April case 6: // Juni case 9: // September case 11: days = 30; // November break; case 2: days = 28; // Februar break; default: System.out.println( Ziffer repräsentiert keinen Monat ); 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 27 26.10.2008 FH-Wiesbaden --- Medieninformatik --- WS 08/09 --- Prof. Dr. Ulrich Schwanecke 28