1 / 22 Einstieg in die Informatik mit Java Formatierte Ausgabe Gerd Bohlender Institut für Angewandte und Numerische Mathematik
Gliederung 2 / 22 1 Überblick 2 Nachteile von println 3 Formatierte Ausgabe 4 Weitere Formatvarianten
Gliederung 3 / 22 1 Überblick 2 Nachteile von println 3 Formatierte Ausgabe 4 Weitere Formatvarianten
4 / 22 Überblick In diesem Kapitel wird beschrieben, wie die Ausgabe von Zahlen übersichtlich gestaltet werden kann. Bisherige Ausgabe Ausgabe mit println in freiem Format. Alternative Ausgabe Formatierte Ausgabe mit printf.
Gliederung 5 / 22 1 Überblick 2 Nachteile von println 3 Formatierte Ausgabe 4 Weitere Formatvarianten
Eigenschaften von println 6 / 22 Bei der Ausgabe mit print bzw. println werden nur so viele Stellen ausgegeben, wie für die Darstellung des Werts nötig sind. Vorteil: sparsamer Platzverbrauch Nachteil: kann sehr unübersichtlich werden Gutes Beispiel: Funktionswert ausgeben x = 1; System. out. p r i n t l n ( s i n ( + x + ) = + Math. s i n ( x ) ) ; sin(1.0) = 0.8414709848078965
Nachteile von println 7 / 22 Schlechtes Beispiel: Funktionstabelle ausgeben for ( double x = 0.2; x<1; x +=0. 1) System. out. p r i n t l n ( x + \ t + Math. s i n ( x ) + \ t + Math. cos ( x ) ) ; -0.2-0.19866933079506122 0.9800665778412416-0.1-0.09983341664682815 0.9950041652780258 0.0 0.0 1.0 0.1 0.09983341664682815 0.9950041652780258 0.2 0.19866933079506122 0.9800665778412416 0.30000000000000004 0.2955202066613396 0.955336489125606 0.4 0.3894183423086505 0.9210609940028851 0.5 0.479425538604203 0.8775825618903728 0.6 0.5646424733950354 0.8253356149096783 0.7 0.644217687237691 0.7648421872844885 0.7999999999999999 0.7173560908995227 0.6967067093471655 0.8999999999999999 0.7833269096274833 0.6216099682706645 0.9999999999999999 0.8414709848078964 0.5403023058681398
Gliederung 8 / 22 1 Überblick 2 Nachteile von println 3 Formatierte Ausgabe 4 Weitere Formatvarianten
9 / 22 Formatierte Ausgabe Mit der Methode System.out.printf() können Ergebnisse formatiert ausgegeben werden. Gleichbedeutend ist System.out.format(). Syntax System.out.printf ( Formatstring, Ausdrücke ) Die Ausdrücke steht für eine durch Komma getrennte Liste von Ausdrücken beliebigen Typs, die ausgegeben werden sollen z.b. Variablen. Der Formatstring enthält Formatangaben der Form %d, %f, %e, %s, usw. Die Formatangaben werden in der angegebenen Reihenfolge zur Formatierung der Ausdrücke verwendet.
10 / 22 Formatierte Ausgabe Bedeutung der Formatangaben: %d ganze Dezimalzahl %e Gleitkommazahl im Gleitkommaformat (mit Exponent) %f Gleitkommazahl im Festkommaformat (ohne Exponent) %s String Regeln für die formatierte Der restliche Formatstring wird als Text ausgegeben. Achtung: die auszugebenden Werte sind durch Komma getrennt, nicht durch +. Achtung: das Zeilenende (entsprechend println) muss durch \n im Formatstring angegeben werden. Falls zu wenige Formatangaben vorliegen, werden nur die ersten Ausdrücke ausgegeben. Falls zu viele oder falsche Formatangaben vorliegen, wird ein Fehler gemeldet.
Formatierte Ausgabe double im Gleitkommaformat 11 / 22 Beispiel: Funktionstabelle ausgeben for ( double x = 0.2; x<1; x +=0. 1) System. out. p r i n t f ( %e %e %e\n, x, Math. s i n ( x ), Math. cos ( x ) ) ; -2.000000e-01-1.986693e-01 9.800666e-01-1.000000e-01-9.983342e-02 9.950042e-01 0.000000e+00 0.000000e+00 1.000000e+00 1.000000e-01 9.983342e-02 9.950042e-01 2.000000e-01 1.986693e-01 9.800666e-01 3.000000e-01 2.955202e-01 9.553365e-01 4.000000e-01 3.894183e-01 9.210610e-01 5.000000e-01 4.794255e-01 8.775826e-01 6.000000e-01 5.646425e-01 8.253356e-01 7.000000e-01 6.442177e-01 7.648422e-01 8.000000e-01 7.173561e-01 6.967067e-01 9.000000e-01 7.833269e-01 6.216100e-01 1.000000e+00 8.414710e-01 5.403023e-01
Formatierte Ausgabe double im Festkommaformat 12 / 22 Beispiel: Funktionstabelle ausgeben for ( double x = 0.2; x<1; x +=0. 1) System. out. p r i n t f ( %f %f %f \n, x, Math. s i n ( x ), Math. cos ( x ) ) ; -0.200000-0.198669 0.980067-0.100000-0.099833 0.995004 0.000000 0.000000 1.000000 0.100000 0.099833 0.995004 0.200000 0.198669 0.980067 0.300000 0.295520 0.955336 0.400000 0.389418 0.921061 0.500000 0.479426 0.877583 0.600000 0.564642 0.825336 0.700000 0.644218 0.764842 0.800000 0.717356 0.696707 0.900000 0.783327 0.621610 1.000000 0.841471 0.540302
13 / 22 Formatierte Ausgabe Beispiel String Beispiel System. out. p r i n t f ( Dies %seine%s\n, i s t, Z e i l e! ) ; Dies ist eine Zeile! Beachte: Mischung von Formatstring und den nachfolgenden auszugebenden Strings, Ausgabe der Leerzeichen in Formatstring oder auszugebendem String, kein Leerzeichen zwischen "%s" und "eine", explizite Ausgabe des Zeilenendes.
Gliederung 14 / 22 1 Überblick 2 Nachteile von println 3 Formatierte Ausgabe 4 Weitere Formatvarianten
15 / 22 Weitere Formatvarianten: Angabe der Zeichenzahl Zahlangabe zwischen % und dem Buchstaben: Anzahl der auszugebenden Zeichen. Falls die Zeichenzahl nicht ausreicht, wird sie erhöht. Beispiele unterschiedliche Breite System. out. p r i n t f ( %4d\n, 123); System. out. p r i n t f ( %5d\n, 123); System. out. p r i n t f ( %2d\n, 123); 123 123 123
Weitere Formatvarianten Beispiel double 16 / 22 Beispiele unterschiedliche Breite System. out. p r i n t f ( %10e\n, 123.456); System. out. p r i n t f ( %15e\n, 123.456); System. out. p r i n t f ( %10f \n, 123.456); System. out. p r i n t f ( %15f \n, 123.456); 1.234560e+02 1.234560e+02 123.456000 123.456000
Weitere Formatvarianten: Darstellung des Vorzeichens Leerzeichen nach %: positives Vorzeichen wird als Leerzeichen ausgegeben. Pluszeichen nach %: positives Vorzeichen wird als Pluszeichen ausgegeben. Unterschiedliche Vorzeichen System. out. p r i n t f ( %3d\n, 123); System. out. p r i n t f ( % 3d\n, 123); System. out. p r i n t f ( % 3d\n, 123); System. out. p r i n t f ( %+3d\n, 123); 123 123-123 +123 17 / 22
Darstellung des Vorzeichens double 18 / 22 Unterschiedliche Vorzeichen System. out. p r i n t f ( % 10e\n, 123.456); System. out. p r i n t f ( % 10e\n, 123.456); System. out. p r i n t f ( %+10e\n, 123.456); System. out. p r i n t f ( % 10 f \n, 123.456); System. out. p r i n t f ( % 10 f \n, 123.456); System. out. p r i n t f ( %+10f \n, 123.456); 1.234560e+02-1.234560e+02 +1.234560e+02 123.456000-123.456000 +123.456000
Weitere Formatvarianten: Nachkommastellen bei double 19 / 22 Zwei Zahlangaben n.m nach %: n = Gesamtzahl der auszugebenden Zeichen, m = Zahl der Nachkommastellen. Unterschiedliche Nachkommastellen System. out. p r i n t f ( %10.3e\n, 123.456); System. out. p r i n t f ( %10.4e\n, 123.456); System. out. p r i n t f ( %10.2e\n, 123.456); 1.235e+02 1.2346e+02 1.23e+02
Weitere Formatvarianten: Nachkommastellen bei double 20 / 22 Unterschiedliche Nachkommastellen System. out. p r i n t f ( %10.3 f \n, 123.456); System. out. p r i n t f ( %10.4 f \n, 123.456); System. out. p r i n t f ( %10.2 f \n, 123.456); System. out. p r i n t f ( %10.1 f \n, 123.456); System. out. p r i n t f ( %8.3 f \n, 123.456); 123.456 123.4560 123.46 123.5 123.456
Beispiel: Festkommaformat mit Vorzeichen 21 / 22 Beispiel Funktionstabelle ausgeben for ( double x= 0.2; x<1; x +=0.1) System. out. p r i n t f ( % 10.7 f % 10.7 f % 10.7 f \n, x, Math. s i n ( x ), Math. cos ( x ) ) ; -0.2000000-0.1986693 0.9800666-0.1000000-0.0998334 0.9950042 0.0000000 0.0000000 1.0000000 0.1000000 0.0998334 0.9950042 0.2000000 0.1986693 0.9800666 0.3000000 0.2955202 0.9553365 0.4000000 0.3894183 0.9210610 0.5000000 0.4794255 0.8775826 0.6000000 0.5646425 0.8253356 0.7000000 0.6442177 0.7648422 0.8000000 0.7173561 0.6967067 0.9000000 0.7833269 0.6216100 1.0000000 0.8414710 0.5403023
Beispiel: Gleitkommaformat mit Vorzeichen 22 / 22 Beispiel Funktionstabelle ausgeben for ( double x= 0.2; x<1; x +=0.1) System. out. p r i n t f ( % 14.7e % 14.7e % 14.7e\n, x, Math. s i n ( x ), Math. cos ( x ) ) ; -2.0000000e-01-1.9866933e-01 9.8006658e-01-1.0000000e-01-9.9833417e-02 9.9500417e-01 0.0000000e+00 0.0000000e+00 1.0000000e+00 1.0000000e-01 9.9833417e-02 9.9500417e-01 2.0000000e-01 1.9866933e-01 9.8006658e-01 3.0000000e-01 2.9552021e-01 9.5533649e-01 4.0000000e-01 3.8941834e-01 9.2106099e-01 5.0000000e-01 4.7942554e-01 8.7758256e-01 6.0000000e-01 5.6464247e-01 8.2533561e-01 7.0000000e-01 6.4421769e-01 7.6484219e-01 8.0000000e-01 7.1735609e-01 6.9670671e-01 9.0000000e-01 7.8332691e-01 6.2160997e-01 1.0000000e+00 8.4147098e-01 5.4030231e-01
23 / 22 Weitere Informationen Weitere Informationen zu printf und den Formatangaben finden Sie in der Java-Online-Dokumentation unter http://www.j2ee.me/javase/6/docs/api/java/io/ PrintStream.html http://www.j2ee.me/javase/6/docs/api/java/util/ Formatter.html#syntax