Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

(c) Krzysztof Barteczko 2014

Podobne prezentacje


Prezentacja na temat: "(c) Krzysztof Barteczko 2014"— Zapis prezentacji:

1 (c) Krzysztof Barteczko 2014
Klasy narzędziowe (2) (c) Krzysztof Barteczko 2014

2 (c) Krzysztof Barteczko 2014
Autoboxing Klasy, opakowujące typy proste: Integer, Short, Byte, Long, Float, Double, Character, Boolean (c) Krzysztof Barteczko 2014

3 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: 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 d1 = 1e16, d2 = d1; for(int i = 1; i<= ; i++) d2++; System.out.println("Różnica: " + (d2 - d1)); System.out.println("ULP = " + Math.ulp(d1)); Poza tym problem dostępnej precyzji: double licz2 = , licz3 = licz2, licz4 = licz ; System.out.println(licz4 - licz2);  wynik różny od 0 Różnica: 0.0 ULP = 2.0 (c) Krzysztof Barteczko 2014

4 BigDecimal dla dokładnych obliczeń
BigDecimal liczbaA = new BigDecimal("3"); BigDecimal liczbaB = new BigDecimal("0.2"); BigDecimal wynik = liczbaA.multiply(liczbaB); if (!wynik.equals(new BigDecimal("0.6"))) System.out.println("Nie równe"); else System.out.println("Równe"); BigDecimal licz2 = new BigDecimal(" "), licz1111 = new BigDecimal("1111"), licz3 = licz1111.add(licz2), licz4 = licz3.subtract(licz1111); System.out.println(licz3); System.out.println(licz4); System.out.println(licz4.subtract(licz2).toPlainString()); Równe (c) Krzysztof Barteczko 2014

5 (c) Krzysztof Barteczko 2014
Daty - Calendar (c) Krzysztof Barteczko 2014

6 Operacje na kalendarzu
(c) Krzysztof Barteczko 2014

7 (c) Krzysztof Barteczko 2014
Wprowadzanie dat String data = " "; // " " @SuppressWarnings("resource") Scanner s = new Scanner(data).useDelimiter("-"); Calendar c = Calendar.getInstance(); c.setLenient(false); try { c.set(s.nextInt(), s.nextInt() - 1, s.nextInt()); System.out.println(c.getTime()); } catch (Exception exc) { System.out.println("Wadliwa data: " +exc); } SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); df.setLenient(false); Date d = null; d = df.parse(data); c.setTime(d); } catch (ParseException exc) { System.out.println("Wadliwa data: " + exc); Thu Oct 30 03:35:33 CET 2014 Thu Oct 30 00:00:00 CET 2014 Wadliwa data: java.lang.IllegalArgumentException: DAY_OF_MONTH Wadliwa data: java.text.ParseException: Unparseable date: " " (c) Krzysztof Barteczko 2014

8 (c) Krzysztof Barteczko 2014
Nowe API dla dat i czasu (c) Krzysztof Barteczko 2014

9 (c) Krzysztof Barteczko 2014
Przykład static void show(Object o) { System.out.println(o.getClass().getSimpleName() + " -> " + o); } //... LocalDate data; LocalTime czas; LocalDateTime dacza; ZonedDateTime zdt; show( data = LocalDate.of(2014, OCTOBER, 16) ); show( czas = LocalTime.of(10, 30) ); show( LocalDateTime.of(2013, 5, 1, 0, 0) ); show( dacza = LocalDateTime.of(data, czas)); show( ZonedDateTime.now() ); show( zdt = ZonedDateTime.of(dacza, ZoneId.of("Asia/Nicosia"))); show( LocalDate.from(zdt) ); show( LocalTime.from(zdt) ); show( dacza.toLocalDate() ); show( dacza.toLocalTime() ); show( data.withDayOfMonth(10)); show( data.withMonth(8) ); show( data.withYear(2014)); LocalDate -> LocalTime -> 10:30 LocalDateTime -> T00:00 LocalDateTime -> T10:30 ZonedDateTime -> T03:16: :00[Europe/Belgrade] ZonedDateTime -> T10:30+03:00[Asia/Nicosia] LocalDate -> LocalDate -> (c) Krzysztof Barteczko 2014

10 Uzyskiwanie informacji
static void info(Object ... args) { for (Object o : args) { System.out.println(o); } // ... LocalDate d = LocalDate.of(2014, OCTOBER, 16); info( d, "Rok ma dni: " + d.lengthOfYear(), "Miesiąc ma dni: " + d.lengthOfMonth(), "Rok: " + d.getYear(), "Czy jest przestępny: " +d.isLeapYear(), "Miesiąc: " + d.getMonth(), "Nr miesiąca: " + d.getMonthValue(), "Dzień miesiąca: " + d.getDayOfMonth(), "Dzień tygodnia: " + d.getDayOfWeek() ); Rok ma dni: 365 Miesiąc ma dni: 31 Rok: 2014 Czy jest przestępny: false Miesiąc: OCTOBER Nr miesiąca: 10 Dzień miesiąca: 16 Dzień tygodnia: THURSDAY (c) Krzysztof Barteczko 2014

11 (c) Krzysztof Barteczko 2014
Wybrane operacje (1) (c) Krzysztof Barteczko 2014

12 (c) Krzysztof Barteczko 2014
Operacje (2) (c) Krzysztof Barteczko 2014

13 Formatowanie liczb i dat
(c) Krzysztof Barteczko 2014

14 (c) Krzysztof Barteczko 2014
Formatowanie (c) Krzysztof Barteczko 2014

15 (c) Krzysztof Barteczko 2014
Elementy formatu (c) Krzysztof Barteczko 2014

16 Wybrane symbole konwersji
(c) Krzysztof Barteczko 2014

17 (c) Krzysztof Barteczko 2014
Przykład double cena = 1.52; double ilosc = 3; double koszt = cena * ilosc; System.out.printf("Koszt wynosi %.2f zł", koszt); System.out.printf("\nData: %tF", Calendar.getInstance()); Koszt wynosi 4.56 zł Data: 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 %.2f zł", koszt); W tym przypadku stała statyczna Locale.ROOT oznacza neutralną lokalizację (bez wybranego kraju i języka). (c) Krzysztof Barteczko 2014

18 (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++) { out.printf("%5d", arr[i]); if (i%2!=0) System.out.println(); } // Zastosowanie znaku formatu <"); out.println("Zaokraglenia"); out.printf("%.3f %<.2f %<.1f", ); // Znak < szczególnie przydatny w datach/czasie Calendar c = Calendar.getInstance(); c.set(2013, 1, 1); out.printf("\nW roku %tY i miesiącu %<tm mamy %d dni", c, c.getActualMaximum(Calendar.DATE) ); // Oczywiście możemy formatować do Stringów String dateNow = String.format("%td-%<tm-%<tY", currentTimeMillis()); JOptionPane.showMessageDialog(null, dateNow); Wyrównany wydruk tablicy 1 100 Zaokraglenia W roku 2013 i miesiącu 02 mamy 28 dni (c) Krzysztof Barteczko 2014

19 (c) Krzysztof Barteczko 2014
Formatowanie dat Calendar cal = Calendar.getInstance(); String[] daty = { " ", " ", " " }; String patt = "d MMMM yyyy (EEEE)"; for (String s : daty) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); cal.setTime(df.parse(s)); cal.add(Calendar.DATE, 1); df.applyLocalizedPattern(patt); String outd = df.format(cal.getTime()); System.out.println(outd); // Prościej w Java 8 LocalDate dat = LocalDate.parse(s).plusDays(1); String old = dat.format( DateTimeFormatter.ofPattern(patt, new Locale("pl"))); System.out.println(old); } 2 września 2014 (wtorek) 7 września 2013 (sobota) 6 lutego 1999 (sobota) (c) Krzysztof Barteczko 2014


Pobierz ppt "(c) Krzysztof Barteczko 2014"

Podobne prezentacje


Reklamy Google