Klasy narzdziowe 2 c Krzysztof Barteczko 2014 Autoboxing
Klasy narzędziowe (2) (c) Krzysztof Barteczko 2014
Autoboxing Klasy, opakowujące typy proste: Integer, Short, Byte, Long, Float, Double, Character, Boolean (c) Krzysztof Barteczko 2014
Specyfika działań na liczbach rzeczywistych double liczba = 3 * 0. 2; double wynik = 0. 6; if (liczba != wynik) System. out. println("Nie równe. Różnica wynosi: " + (liczba - wynik)); else System. out. println("Równe"); Nie równe. Różnica wynosi: 1. 1102230246251565 E-16 ULP (Unit in the last place) pokazuje odległość pomiędzy dwoma sąsiednimi liczbami mówiąc dokładniej: ULP(x) to odległość między x a pierwszą dostępną liczbą większą od x i pierwszą dostępną liczbą mniejszą od x. double d 1 = 1 e 16, d 2 = d 1; for(int i = 1; i<=1000000; i++) d 2++; System. out. println("Różnica: " + (d 2 - d 1)); System. out. println("ULP = " + Math. ulp(d 1)); Różnica: 0. 0 ULP = 2. 0 Poza tym problem dostępnej precyzji: double licz 2 = 0. 11111111, licz 3 = 1111 + licz 2, licz 4 = licz 3 - 1111; System. out. println(licz 4 - licz 2); wynik różny od 0 (c) Krzysztof Barteczko 2014
Big. Decimal dla dokładnych obliczeń Big. Decimal liczba. A = new Big. Decimal("3"); Big. Decimal liczba. B = new Big. Decimal("0. 2"); Big. Decimal wynik = liczba. A. multiply(liczba. B); if (!wynik. equals(new Big. Decimal("0. 6"))) System. out. println("Nie równe"); else System. out. println("Równe"); Big. Decimal licz 2 = new Big. Decimal("0. 11111111111111111"), licz 1111 = new Big. Decimal("1111"), licz 3 = licz 1111. add(licz 2), licz 4 = licz 3. subtract(licz 1111); System. out. println(licz 3); System. out. println(licz 4. subtract(licz 2). to. Plain. String()); Równe 111111111111111111111111111111111 0. 00000000000000000 (c) Krzysztof Barteczko 2014
Daty - Calendar (c) Krzysztof Barteczko 2014
Operacje na kalendarzu (c) Krzysztof Barteczko 2014
Wprowadzanie dat String data = "2014 -10 -30"; // "2014 -10 -32" @Suppress. Warnings("resource") Scanner s = new Scanner(data). use. Delimiter("-"); Calendar c = Calendar. get. Instance(); c. set. Lenient(false); try { c. set(s. next. Int(), s. next. Int() - 1, s. next. Int()); System. out. println(c. get. Time()); } catch (Exception exc) { System. out. println("Wadliwa data: " +exc); } Simple. Date. Format df = new Simple. Date. Format("yyyy-MM-dd"); df. set. Lenient(false); Thu Oct 30 03: 35: 33 CET 2014 Date d = null; Thu Oct 30 00: 00 CET 2014 try { Wadliwa data: java. lang. Illegal. Argument. Exception: d = df. parse(data); DAY_OF_MONTH Wadliwa data: java. text. Parse. Exception: c. set. Time(d); System. out. println(c. get. Time()); Unparseable date: "2014 -10 -32" } catch (Parse. Exception exc) { System. out. println("Wadliwa data: " + exc); } (c) Krzysztof Barteczko 2014
Nowe API dla dat i czasu (c) Krzysztof Barteczko 2014
Przykład static void show(Object o) { System. out. println(o. get. Class(). get. Simple. Name() + " -> " + o); } //. . . Local. Date -> 2014 -10 -16 Local. Date data; Local. Time -> 10: 30 Local. Time czas; Local. Date. Time -> 2013 -05 -01 T 00: 00 Local. Date. Time dacza; Local. Date. Time -> 2014 -10 -16 T 10: 30 Zoned. Date. Time -> 2014 -12 Zoned. Date. Time zdt; 01 T 03: 16: 04. 710+01: 00[Europe/Belgrade] show( data = Local. Date. of(2014, OCTOBER, 16) ); Zoned. Date. Time -> 2014 -10 show( czas = Local. Time. of(10, 30) ); 16 T 10: 30+03: 00[Asia/Nicosia] Local. Date -> 2014 -10 -16 show( Local. Date. Time. of(2013, 5, 1, 0, 0) ); show( dacza = Local. Date. Time. of(data, czas)); Local. Time -> 10: 30 Local. Date -> 2014 -10 -16 show( Zoned. Date. Time. now() ); Local. Time -> 10: 30 Local. Date -> 2014 -10 -10 show( zdt = Zoned. Date. Time. of(dacza, Local. Date -> 2014 -08 -16 Zone. Id. of("Asia/Nicosia"))); Local. Date -> 2014 -10 -16 show( Local. Date. from(zdt) ); show( Local. Time. from(zdt) ); show( dacza. to. Local. Date() ); show( dacza. to. Local. Time() ); show( data. with. Day. Of. Month(10)); show( data. with. Month(8) ); show( data. with. Year(2014)); (c) Krzysztof Barteczko 2014
Uzyskiwanie informacji static void info(Object. . . args) { for (Object o : args) { System. out. println(o); } } //. . . Local. Date d = Local. Date. of(2014, OCTOBER, 16); info( d, "Rok ma dni: " + d. length. Of. Year(), "Miesiąc ma dni: " + d. length. Of. Month(), "Rok: " + d. get. Year(), "Czy jest przestępny: " +d. is. Leap. Year(), "Miesiąc: " + d. get. Month(), 2014 -10 -16 "Nr miesiąca: " + d. get. Month. Value(), Rok ma dni: 365 "Dzień miesiąca: " + d. get. Day. Of. Month(), Miesiąc ma dni: 31 Rok: 2014 "Dzień tygodnia: " + d. get. Day. Of. Week() Czy jest przestępny: ); Miesiąc: OCTOBER false Nr miesiąca: 10 Dzień miesiąca: 16 Dzień tygodnia: THURSDAY (c) Krzysztof Barteczko 2014
Wybrane operacje (1) (c) Krzysztof Barteczko 2014
Operacje (2) (c) Krzysztof Barteczko 2014
Formatowanie liczb i dat (c) Krzysztof Barteczko 2014
Formatowanie (c) Krzysztof Barteczko 2014
Elementy formatu (c) Krzysztof Barteczko 2014
Wybrane symbole konwersji (c) Krzysztof Barteczko 2014
Przykład double cena = 1. 52; double ilosc = 3; double koszt = cena * ilosc; System. out. printf("Koszt wynosi %. 2 f zł", koszt); System. out. printf("n. Data: %t. F", Calendar. get. Instance()); Koszt wynosi 4. 56 zł Data: 2014 -12 -01 Dla lokalizacji polskiej liczba pokazywana jest z przecinkiem jako separatorem miejsc dziesiętnych. Aby uzyskać kropkę można napisać: System. out. printf(Locale. ROOT, "Koszt wynosi %. 2 f zł", koszt); W tym przypadku stała statyczna Locale. ROOT oznacza neutralną lokalizację (bez wybranego kraju i języka). (c) Krzysztof Barteczko 2014
Przykład 2 import static java. lang. System. *; //. . . out. println("Wyrównany wydruk tablicy"); int[] arr = { 1, 100, 200, 4000 }; for (int i = 0; i < arr. length; i++) { Wyrównany wydruk tablicy 1 100 out. printf("%5 d", arr[i]); 200 4000 if (i%2!=0) System. out. println(); Zaokraglenia } 1. 256 1. 26 1. 3 W roku 2013 i miesiącu 02 // Zastosowanie znaku formatu <"); out. println("Zaokraglenia"); out. printf("%. 3 f %<. 2 f %<. 1 f", 1. 256 ); // Znak < szczególnie przydatny w datach/czasie Calendar c = Calendar. get. Instance(); c. set(2013, 1, 1); out. printf("n. W roku %t. Y i miesiącu %<tm mamy %d dni", c, c. get. Actual. Maximum(Calendar. DATE) ); // Oczywiście możemy formatować do Stringów String date. Now = String. format("%td-%<tm-%<t. Y", current. Time. Millis()); JOption. Pane. show. Message. Dialog(null, date. Now); (c) Krzysztof Barteczko 2014 mamy 28 dni
Formatowanie dat Calendar cal = Calendar. get. Instance(); String[] daty = { "2014 -09 -01", "2013 -09 -06", "1999 -02 -05" }; String patt = "d MMMM yyyy (EEEE)"; for (String s : daty) { Simple. Date. Format df = new Simple. Date. Format("yyyy-MM-dd"); cal. set. Time(df. parse(s)); cal. add(Calendar. DATE, 1); df. apply. Localized. Pattern(patt); String outd = df. format(cal. get. Time()); System. out. println(outd); // Prościej w Java 8 Local. Date dat = Local. Date. parse(s). plus. Days(1); String old = dat. format( Date. Time. Formatter. of. Pattern(patt, new Locale("pl"))); System. out. println(old); 2 2 7 7 6 6 } (c) Krzysztof Barteczko 2014 września 2014 (wtorek) września 2013 (sobota) lutego 1999 (sobota)
- Slides: 19