SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Java. Sztuka
                                         programowania
           KATALOG KSI¥¯EK
                                         Autorzy: Herbert Schildt, James Holmes
                      KATALOG ONLINE     T³umaczenie: Rafa³ Joñca
                                         ISBN: 83-7361-422-2
       ZAMÓW DRUKOWANY KATALOG           Tytu³ orygina³u: The Art of Java
                                         Format: B5, stron: 324

              TWÓJ KOSZYK
                                         Przejd na wy¿szy poziom programowania dziêki dwóm „guru” Javy: Herbowi
                    DODAJ DO KOSZYKA
                                         Schildtowi i Jamesowi Holmesowi. Po³¹czenie ich wiedzy pozwoli Ci poznaæ wiele
                                         sekretów i sztuczek wykorzystywanych przez profesjonalistów. W ksi¹¿ce autorzy
                                         przedstawiaj¹ przyk³ady u¿ytecznych aplikacji oraz towarzysz¹ce im opisy u¿ytych
         CENNIK I INFORMACJE             technologii. Prezentowane przyk³ady mo¿esz wykorzystaæ w swojej codziennej pracy.
                                         Pocz¹wszy od interpreterów jêzyka, agentów internetowych i podsystemów e-mail,
                   ZAMÓW INFORMACJE      skoñczywszy na analizatorach wyra¿eñ, narzêdziach statystycznych i apletach
                     O NOWO CIACH        finansowych — wszystkie aplikacje s¹ gotowe do u¿ycia. Mo¿na je te¿ dowolnie
                                         modyfikowaæ i rozszerzaæ.
                       ZAMÓW CENNIK
                                         W ksi¹¿ce znajdziesz:
                                            • Omówienie zalet jêzyka Java,
                 CZYTELNIA                  • Tworzenie analizatora wyra¿eñ numerycznych,
                                            • Tworzenie agenta przeszukuj¹cego internet,
          FRAGMENTY KSI¥¯EK ONLINE          • Projektowanie i implementacja interpretera jêzyka programowania,
                                            • Wykonanie funkcjonalnego systemu pocztowego,
                                            • Konstruowanie programu do pobierania danych z internetu z mo¿liwo ci¹
                                              pobierania fragmentów stron,
                                            • Wykonanie narzêdzi statystycznych obliczaj¹cych rednia, medianê, modaln¹,
                                              odchylenie standardowe, itp.
                                            • Wykonanie apletów i serwletów finansowych obliczaj¹cych równe raty po¿yczki,
                                              przysz³¹ warto æ inwestycji, kwotê emerytury, itp.
                                            • Prze ledzenie ró¿nych technik wyszukiwania bazuj¹cych na sztucznej inteligencji,
                                            • Zapoznanie siê z mo¿liwo ci¹ przegl¹dania stron HTML-a w Javie.
                                         O autorach:
Wydawnictwo Helion                       Herb Schildt jest jednym z najpopularniejszych autorów ksi¹¿ek o programowaniu.
ul. Chopina 6                            Jest autorytetem w sprawach jêzyków C, C++, Java i C#, a tak¿e doskona³ym
44-100 Gliwice                           programist¹ systemu Windows. Jego ksi¹¿ki sprzeda³y siê na ca³ym wiecie
tel. (32)230-98-63                       w ponad 3 milionach egzemplarzy i zosta³y przet³umaczone na wiêkszo æ jêzyków.
e-mail: helion@helion.pl
                                         James Holmes jest konsultantem do spraw tworzenia programowania oraz aplikacji
                                         serwerowych w rodowiskach biznesowych. Zdoby³ wiele nagród, miêdzy innymi
                                         Summer Olympic Games oraz nagrodê Java Developer w roku 2002, przyznawan¹
                                         przez Oracle Magazine.
Spis treści
                O Autorach ........................................................................................ 7
                Przedmowa........................................................................................ 9
Rozdział 1. Geniusz Javy .................................................................................... 13
                Typy proste i obiekty — odpowiednia równowaga ..........................................................14
                Zarządzanie pamięcią przez usuwanie niepotrzebnych obiektów.....................................15
                Elegancki i prosty model wielowątkowy ..........................................................................16
                W pełni zintegrowane wyjątki...........................................................................................16
                Zaakcentowanie znaczenia polimorfizmu.........................................................................17
                Przenośność i bezpieczeństwo dzięki kodowi bajtowemu................................................18
                Bogactwo interfejsów programistycznych Javy................................................................18
                Aplet ..................................................................................................................................19
                Ciągła rewolucja................................................................................................................20
Rozdział 2. Rekurencyjny analizator wyrażeń ...................................................... 21
                Wyra enia..........................................................................................................................22
                Analiza wyra eń — problem.............................................................................................22
                Przetwarzanie wyra enia...................................................................................................23
                Rozbijanie wyra enia ........................................................................................................25
                Prosty analizator wyra eń .................................................................................................28
                    Opis działania analizatora ...........................................................................................34
                Dodawanie zmiennych do analizatora...............................................................................35
                Sprawdzanie składni w analizatorze rekurencyjnym ........................................................43
                Aplet kalkulatora ...............................................................................................................44
                Mo liwe modyfikacje........................................................................................................46
Rozdział 3. Implementacja interpreterów języków w Javie................................... 47
                Jaki język programowana interpretować? .........................................................................48
                Wstęp do interpretera ........................................................................................................49
                Interpreter języka SBASIC................................................................................................50
                Analizator wyra eń języka SBASIC .................................................................................67
                    Wyra enia w SBASIC ................................................................................................67
                    Tokeny SBASIC .........................................................................................................68
                Interpreter ..........................................................................................................................72
                    Klasa InterpreterException .........................................................................................72
                    Konstruktor klasy SBasic............................................................................................72
                    Słowa kluczowe ..........................................................................................................74
                    Metoda run() ...............................................................................................................75
                    Metoda sbInterp()........................................................................................................76
                    Przypisanie..................................................................................................................77
4                                                                                                  Java. Sztuka programowania


                 Instrukcja PRINT ........................................................................................................78
                 Instrukcja INPUT........................................................................................................79
                 Instrukcja GOTO ........................................................................................................80
                 Instrukcja IF ................................................................................................................83
                 Pętla FOR....................................................................................................................83
                 Instrukcja GOSUB ......................................................................................................86
                 Instrukcja END ...........................................................................................................87
              Wykorzystanie języka SBASIC ........................................................................................87
                 Inne przykładowe programy języka SBASIC.............................................................88
              Rozszerzanie interpretera ..................................................................................................90
              Tworzenie własnego języka programowania ....................................................................90
Rozdział 4. Wykonanie menedżera pobierania plików w Javie .............................. 91
              Sposoby pobierania plików z internetu .............................................................................92
              Omówienie programu........................................................................................................92
              Klasa Download ................................................................................................................93
                 Zmienne pobierania ....................................................................................................97
                 Konstruktor klasy........................................................................................................97
                 Metoda download().....................................................................................................97
                 Metoda run() ...............................................................................................................97
                 Metoda stateChanged() .............................................................................................101
                 Metody akcesorowe i działań....................................................................................101
              Klasa ProgressRenderer ..................................................................................................101
              Klasa DownloadsTableModel .........................................................................................102
                 Metoda addDownload() ............................................................................................104
                 Metoda clearDownload() ..........................................................................................105
                 Metoda getColumnClass() ........................................................................................105
                 Metoda getValueAt() ................................................................................................105
                 Metoda update() ........................................................................................................106
              Klasa DownloadManager................................................................................................106
                 Zmienne klasy DownloadManager ...........................................................................111
                 Konstruktor klasy......................................................................................................112
                 Metoda verifyUrl()....................................................................................................112
                 Metoda tableSelectionChanged()..............................................................................113
                 Metoda updateButtons()............................................................................................113
                 Obsługa zdarzeń akcji ...............................................................................................114
              Kompilacja i uruchamianie programu.............................................................................115
              Rozszerzanie mo liwości programu................................................................................115
Rozdział 5. Implementacja klienta e-mail w Javie ............................................. 117
              Poczta elektroniczna od podszewki.................................................................................118
                  POP3 .........................................................................................................................118
                  IMAP.........................................................................................................................118
                  SMTP ........................................................................................................................118
                  Ogólna procedura wysyłania lub odbierania wiadomości e-mail .............................119
              Interfejs programistyczny JavaMail ................................................................................119
                  Ogólny opis wykorzystania biblioteki ......................................................................120
              Prosty klient poczty elektronicznej .................................................................................121
                  Klasa ConnectDialog ................................................................................................122
                  Klasa DownloadingDialog........................................................................................127
                  Klasa MessageDialog................................................................................................128
                  Klasa MessageTableModel.......................................................................................134
                  Klasa EmailClient .....................................................................................................138
              Kompilacja i uruchamianie klienta poczty......................................................................153
              Rozszerzanie mo liwości klienta ....................................................................................154
Spis treści                                                                                                                                     5


Rozdział 6. Przeszukiwanie sieci za pomocą Javy.............................................. 155
               Podstawy funkcjonowania agenta internetowego ...........................................................156
               Omówienie protokołu robot ............................................................................................157
               Wprowadzenie do agenta wyszukiwania ........................................................................158
               Klasa SearchCrawler .......................................................................................................158
                  Zmienne klasy...........................................................................................................173
                  Konstruktor klasy SearchCrawler .............................................................................173
                  Metoda actionSearch() ..............................................................................................174
                  Metoda search() ........................................................................................................176
                  Metoda showError()..................................................................................................179
                  Metoda updateStats() ................................................................................................179
                  Metoda addMatch()...................................................................................................180
                  Metoda verifyUrl()....................................................................................................180
                  Metoda isRobotAllowed() ........................................................................................181
                  Metoda downloadPage() ...........................................................................................183
                  Metoda removeWwwFromUrl() ...............................................................................184
                  Metoda retrieveLinks() .............................................................................................185
                  Metoda searchStringMatches() .................................................................................191
                  Metoda crawl()..........................................................................................................192
               Kompilacja i uruchomienie programu.............................................................................194
               Mo liwe zastosowania agentów internetowych..............................................................196
Rozdział 7. Rendering HTML w Javie ................................................................ 197
               Rendering HTML w edytorze JEditorPane.....................................................................197
               Obsługa zdarzeń łączy.....................................................................................................198
               Tworzenie prostej przeglądarki internetowej..................................................................199
                  Klasa MiniBrowser ...................................................................................................199
                  Zmienne klasy MiniBrowser.....................................................................................204
                  Konstruktor klasy......................................................................................................205
                  Metoda actionBack().................................................................................................205
                  Metoda actionForward() ...........................................................................................206
                  Metoda actionGo() ....................................................................................................206
                  Metoda showError()..................................................................................................207
                  Metoda verifyUrl()....................................................................................................207
                  Metoda showPage() ..................................................................................................207
                  Metoda updateButtons()............................................................................................209
                  Metoda hyperlinkUpdate()........................................................................................210
               Kompilacja i uruchomienie przeglądarki ........................................................................210
               Zastosowania renderingu HTML ....................................................................................211
Rozdział 8. Statystyka i wykresy ..................................................................... 213
               Próbki, zbiory, rozkład i zmienne ...................................................................................214
               Podstawy statystyki .........................................................................................................215
                  Średnia ......................................................................................................................215
                  Mediana.....................................................................................................................216
                  Moda (dominanta).....................................................................................................216
               Wariancje i odchylenie standardowe...............................................................................218
               Równanie regresji............................................................................................................219
                  Współczynnik korelacji ............................................................................................221
               Cała klasa Stats................................................................................................................223
               Tworzenie wykresów ......................................................................................................226
                  Skalowanie danych ...................................................................................................226
                  Klasa Graphs.............................................................................................................227
                  Zmienne klasy Graphs ..............................................................................................231
                  Konstruktor klasy Graphs .........................................................................................232
                  Metoda paint()...........................................................................................................234
6                                                                                                    Java. Sztuka programowania


                  Metoda bargraph() ....................................................................................................237
                  Metoda scatter() ........................................................................................................237
                  Metoda regplot() .......................................................................................................237
               Aplikacja tworzenia statystyk .........................................................................................238
                  Konstruktor klasy StatsWin ......................................................................................242
                  Procedura obsługi itemStateChanged().....................................................................243
                  Metoda actionPerformed() ........................................................................................244
                  Metoda shutdown() ...................................................................................................244
                  Metoda createMenu()................................................................................................244
                  Klasa DataWin ..........................................................................................................244
                  Łączymy wszystko razem .........................................................................................245
               Prosty aplet ze statystykami ............................................................................................247
               Mo liwe udoskonalenia...................................................................................................249
Rozdział 9. Aplety i serwlety finansowe............................................................ 251
               Znajdowanie raty kredytu................................................................................................252
                  Pola apletu.................................................................................................................255
                  Metoda init() .............................................................................................................256
                  Metoda actionPerformed() ........................................................................................258
                  Metoda paint()...........................................................................................................258
                  Metoda compute().....................................................................................................259
               Znajdowanie przyszłej wartości inwestycji.....................................................................260
               Znajdowanie wkładu początkowego wymaganego
                do uzyskania przyszłej wartości inwestycji ..................................................................263
               Znalezienie inwestycji początkowej wymaganej do uzyskania odpowiedniej emerytury ......267
               Znajdowanie maksymalnej emerytury dla danej inwestycji ...........................................271
               Obliczenie pozostałej kwoty do spłaty kredytu...............................................................275
               Tworzenie serwletów finansowych.................................................................................278
                  Serwer Tomcat ..........................................................................................................278
                  Konwersja apletu RegPay do serwletu .....................................................................280
                  Serwlet RegPayS.......................................................................................................280
               Mo liwe rozszerzenia......................................................................................................283
Rozdział 10. Rozwiązywanie problemów za pomocą sztucznej inteligencji............ 285
               Reprezentacja i terminologia...........................................................................................286
               Rosnąca liczba kombinacji..............................................................................................287
               Techniki wyszukiwania...................................................................................................288
                  Obliczanie wyszukiwania .........................................................................................289
               Problem ...........................................................................................................................289
                  Reprezentacja graficzna ............................................................................................290
               Klasa FlightInfo...............................................................................................................291
               Wyszukiwanie w głąb .....................................................................................................291
                  Analiza wyszukiwania w głąb ..................................................................................300
               Wyszukiwanie wszerz .....................................................................................................300
                  Analiza wyszukiwania wszerz ..................................................................................302
               Dodanie heurystyki .........................................................................................................303
                  Wyszukiwanie wspinaczkowe ..................................................................................304
                  Analiza wyszukiwania wspinaczkowego..................................................................308
                  Wyszukiwanie najmniejszego kosztu .......................................................................309
                  Analiza wyszukiwania najmniejszego kosztu...........................................................310
               Znajdowanie wielu rozwiązań.........................................................................................311
                  Usuwanie ście ek......................................................................................................311
                  Usuwanie węzłów .....................................................................................................312
               Znalezienie „optymalnego” rozwiązania ........................................................................317
               Powrót do zagubionych kluczy .......................................................................................321
               Skorowidz...................................................................................... 325
Rozdział 8.
Statystyka i wykresy
                                                                  Autor: Herb Schildt


   Javy u ywa się przede wszystkim do tworzenia małych programów, na przykład apletów
   i serwletów, słu ących do przetwarzania i wyświetlania danych. Dane często są licz-
   bami, na przykład reprezentują ceny akcji, temperatury dzienne, ruch klientów itp.
   Bardzo często trzeba przetworzyć te dane lub te narysować wykres na ich podstawie.
   Na przykład aplet mo e wyświetlać średnią cenę akcji w przeciągu ostatnich kilku
   miesięcy i rysować wykres prezentujący zmiany ceny. Statystyka i wykresy bardzo
   często pojawiają się w trakcie pisania programów w Javie, zatem zajmiemy się nimi
   w tym rozdziale.

   W tym rozdziale zostanie pokazane wykonanie metody słu ącej do obliczania nastę-
   pujących statystyk:
       średniej;
       mediany;
       dominanty (mody, wartości modalnej);
       odchylenia standardowego;
       równania regresji (linia najlepszego dopasowania);
       współczynnika korelacji.

   W tym rozdziale poka emy tak e sposób rysowania wykresów. Przykłady tutaj przed-
   stawione ka dy mo e dostosować do własnych potrzeb.

   W niniejszym rozdziale szczególny nacisk zostanie poło ony na dwa aspekty: obli-
   czenia matematyczne i wyświetlanie uzyskanych wyników w sposób graficzny. Java
   nie jest zoptymalizowana pod kątem obliczeń matematycznych ale wspiera ró ne
   metody obliczeń. Choć obliczenia pokazane w tym rozdziale nie wymagają du ej
   mocy procesora ani nie są wysoce zło one, stanowią dobrą ilustrację mo liwych spo-
   sobów radzenia sobie z danymi.
214                                                              Java. Sztuka programowania


      Java od samego początku była zaprojektowana jako język zapewniający interfejs gra-
      ficzny. Z tego powodu istnieje wiele klas zajmujących się interfejsami graficznymi. Java
      posiada aktualnie dwa systemy graficznych interfejsów u ytkownika: AWT i Swing.
      System Swing był dosyć intensywnie opisywany w poprzednich rozdziałach, zatem
      teraz warto zapoznać się z systemem AWT. Czytelnik dowie się, w jaki sposób mo na
      tworzyć okna AWT, jak zapewnia się obsługę zmiany ich rozmiaru, ponowne ryso-
      wanie okna i inne elementy. Java posiada unikalne cechy, takie jak klasy wewnętrzne
      i adaptory, zatem kod interfejsu graficznego w tym języku jest bardziej elegancki i krót-
      szy od tego samego kodu uzyskiwanego w innych językach.




Próbki, zbiory, rozkład i zmienne
      Przed rozpoczęciem omawiania właściwego programu nale y zdefiniować kilka pod-
      stawowych terminów i koncepcji związanych ze statystyką. Ogólnie informacje staty-
      styczne otrzymuje się w postaci próbek. Następnie dokonuje się uogólnienia wyników.
      Ka da z próbek pochodzi z określonego zbioru wartości przewidzianych dla danej
      sytuacji. Stosuje tu się po prostu nazwę zbiór. Na przykład mo na szacować wielkość
      produkcji fabryki zapałek w przeciągu całego roku, uogólniając dane zebrane tylko
      w jednym dniu. W ten sposób mo na dokonać ekstrapolacji dotyczącej całego roku na
      podstawie znacznie skromniejszej informacji.

      Je eli próbka jest wyczerpująca, jest równa całemu zbiorowi. W przypadku omawia-
      nej, przykładowej fabryki, jeśli próbka zawiera wielkość produkcji fabryki dla całego
      roku, wtedy jest ona równa całemu zbiorowi. Jeśli próbka jest mniejsza od całego zbioru,
      jest mo liwe wystąpienie błędu. Wtedy nale y znać współczynnik określający wielkość
      błędu. Na potrzeby niniejszego rozdziału zakłada się, i próbka jest równa zbiorowi,
      więc nie występują błędy statystyczne.

      Informacje statystyczne zale ą od rozkładu zmiennych losowych w zbiorze. Mo liwych
      jest kilka ró nych rodzajów rozkładów prawdopodobieństwa przyjmowania wartości
      przez zmienne losowe. Najbardziej znanym jest rozkład normalny, czyli rozkład Gaussa,
      którego reprezentacją jest tzw. krzywa dzwonowa. Rozkład analizowanych wartości
      przyjmuje kształt symetrycznego dzwonu. Oznacza to, e zmienne losowe o wartości
      zbli onej do przeciętnej występują najczęściej.

      W trakcie badania statystycznego określa się zmienne zale ne (badane) i zmienne
      niezale ne (ich wartość pozwala wyliczyć zmienną zale ną). W tym rozdziale zmienną
      niezale ną jest czas. Zmienna ta jest zwiększana w ka dym roku o wartość jednost-
      kową. Zastosowanie czasu jako zmiennej niezale nej jest powszechnym zjawi-
      skiem. Na przykład przy badaniu kursów stosuje się zmienną niezale ną z odstę-
      pem jeden dzień.
Rozdział 8. ♦ Statystyka i wykresy                                                       215



Podstawy statystyki
        U podstawy większości analiz statystycznych występują trzy parametry badanych prób:
        średnia, mediana i moda (dominanta). Ka dy z wymienionych współczynników jest
        u yteczny ale dopiero ich połączenie pozwala na dokładne przeanalizowanie charak-
        terystyki próbki.

        Metody statystyczne opisywane w niniejszym rozdziale opierają się na zało eniu, i
        zmienne losowe, składające się na próbkę znajdują się w tablicy zmiennych typu FQWDNG.
        Wszystkie metody statystyczne są metodami typu UVCVKE przechowywanymi w klasie
        5VCVU. Klasę tą w całości przedstawimy w dalszej części rozdziału. Prezentowane metody
        są typu UVCVKE, zatem mo na je wywołać bez potrzeby tworzenia obiektu 5VCVU.


Średnia
        Średnia jest najczęściej wykorzystywaną funkcją w statystyce. Zapewnia obliczanie
        wartości średniej arytmetycznej podanego zbioru zmiennych losowych. W ten sposób
        znajduje się niejako „środek cię kości” zestawu danych. Aby obliczyć średnią aryt-
        metyczną danego zbioru liczb, nale y zsumować wszystkie jego elementy i otrzymaną
        sumę podzielić przez liczbę elementów. Na przykład sumą dla wartości
              1 2 3 4 5 6 7 8 9 10
        jest 55. Podzielenie tej wartości przez liczbę elementów w próbce (10), prowadzi do
        uzyskania wyniku 5.5. Wzór na średnią arytmetyczną jest następujący.




        W tym wzorze Di reprezentuje element danych, natomiast N jest liczbą elementów
        (zmiennych losowych) w próbce.

        Poni sza metoda o nazwie OGCP
 oblicza średnią dla wartości przekazanych w tablicy
        jako parametr. Metoda zwraca średnią arytmetyczną.
           YTCEC TGFPKæ RQFCP[EJ YCTVQ EK
          RWDNKE UVCVKE FQWDNG OGCP
FQWDNG=? XCNU ]
            FQWDNG CXI  

              HQT
KPV K K  XCNUNGPIVJ K


                CXI 
 XCNU=K?

              CXI  XCNUNGPIVJ

              TGVWTP CXI
          _

        Aby u yć metody OGCP
, wystarczy tylko przekazać referencję do tablicy zawierającej
        zbiór wartości. Jako wynik wykonania metody otrzymuje się wartość średniej arytme-
        tycznej elementów przekazanej tablicy.
216                                                             Java. Sztuka programowania


Mediana
      Mediana próbki jest określana jako wartość środkowa dla uporządkowanego rosnąco
      ciągu wartości. Na przykład dla zbioru
            123456789
      wartość mediany wynosi 5. W przypadku parzystej liczby elementów medianą jest
      średnia arytmetyczna dwóch środkowych wartości. Na przykład dla zbioru
            1 2 3 4 5 6 7 8 9 10
      wartość mediany wynosi 5.5. W przypadku próbek o rozkładzie normalnym wartości
      mediany i średniej są podobne. Im jednak rozkład próbki będzie bardziej odbiegał od
      rozkładu normalnego, tym ró nica między medianą a średnią będzie większa.

      Najprostszym sposobem otrzymania mediany z próbki jest posortowanie danych a następ-
      nie pobranie środkowej wartości. Oto sposób działania metody OGFKCP
.
         YTCEC OGFKCPú RQFCP[EJ YCTVQ EK
        RWDNKE UVCVKE FQWDNG OGFKCP
FQWDNG=? XCNU ]
          FQWDNG VGOR=?  PGY FQWDNG=XCNUNGPIVJ?

            5[UVGOCTTC[EQR[
XCNU  VGOR  XCNUNGPIVJ

            #TTC[UUQTV
VGOR  UQTVQYCPKG FCP[EJ

             YTÎEGPKG YCTVQ EK TQFMQYGL
            KH

XCNUNGPIVJ  ]
               ,G NK PKGRCT[UVC NKEDC YCTVQ EK PCLF   TGFPKæ
              TGVWTP 
VGOR=VGORNGPIVJ? 
                      VGOR=
VGORNGPIVJ? 
            _ GNUG TGVWTP
              VGOR=VGORNGPIVJ?
        _

      Aby u yć metody OGFKCP
, wystarczy tylko przekazać referencję do tablicy zawie-
      rającej zbiór wartości. Jako wynik wykonania metody otrzymuje się wartość mediany.

      Warto zauwa yć, i prezentowana metoda wykonuje kopię przekazanej tablicy za
      pomocą polecenia 5[UVGOCTTC[EQR[
. Sortowaniu podlega właśnie kopia. W ten
      sposób przekazana tablica nie ulega modyfikacji. Zachowanie oryginalnej kolejności
      jest bardzo wa ne, na przykład w przypadku tworzenia wykresu.


Moda (dominanta)
      Moda próbki jest wartością najczęściej występującą w zbiorze. Na przykład dla próbki
            123345677789
      modą jest wartość 7, poniewa występuje najczęściej. Moda nie musi być unikalna.
      Na przykład w sytuacji
            10 20 30 30 40 50 60 60 70
Rozdział 8. ♦ Statystyka i wykresy                                                      217


        zarówno wartość 30, jak i 60 występuje po dwa razy. Ka da z tych wartości jest modą.
        Taki zbiór nazywany jest bimodalnym. Zbiór zawierający tylko jedną modą jest zbiorem
        unimodalnym. W prezentowanych przykładach zostanie zastosowane podejście, w któ-
        rym w przypadku wielu wartości mody zostanie zwrócona tylko pierwsza z nich. Je eli
         adna z wartości nie występuje częściej od innych, próbka nie posiada mody.

        Poni sza metoda OQFG
 znajduje modę zbioru.
YTCEC OQFú 
FQOKPCPVú FNC RQFCP[EJ YCTVQ EK
             9[LæVGM 0Q/QFG'ZEGRVKQP LGUV I CUCP[ YVGF[ IF[
              CFPC  NKED PKG Y[UVúRWLG Eú EKGL QF RQQUVC [EJ
             )F[ FYKG NWD YKúEGL YCTVQ EK RQLCYKC UKú TÎYPKG EúUVQ
             YTCECPC LGUV V[NMQ RKGTYUC  PKEJ
RWDNKE UVCVKE FQWDNG OQFG
FQWDNG=? XCNU
              VJTQYU 0Q/QFG'ZEGRVKQP
          ]
            FQWDNG O OQFG8CN  
            KPV EQWPV QNFEQWPV  

              HQT
KPV K K  XCNUNGPIVJ K

 ]
                O  XCNU=K?
                EQWPV  

                   NKECPKG Y[UVúRQYCPKC RQUEGIÎNP[EJ YCTVQ EK
                  HQT
KPV LK
 L  XCNUNGPIVJ L


                    KH
O  XCNU=L? EQWPV
,G NK VC YCTVQ è Y[UVúRWLG Eú EKGL PK RQRTGFPKG
                     CRCOKúVCL Læ
KH
EQWPV QNFEQWPV ]
                    OQFG8CN  O
                    QNFEQWPV  EQWPV
                  _
              _

              KH
QNFEQWPV  
                VJTQY PGY 0Q/QFG'ZEGRVKQP

              GNUG
                TGVWTP OQFG8CN
          _

        Metoda OQFG
 zlicza najpierw liczbę wystąpień poszczególnych wartości w tablicy
        XCNU. Je eli znajdzie wartość występującą więcej razy ni poprzednia, zapamiętuje
        nową wartość w OQFG8CN. Po zakończeniu procesu najczęściej występująca wartość
        znajduje się w zmiennej OQFG8CN i jest ona zwracana. W przypadku wstępowania wielu
        wartości mody, metoda zwraca tylko pierwszą. Je eli próbka nie zawiera dominanty,
        następuje zgłoszenie wyjątku 0Q/QFG'ZEGRVKQP. Oto postać klasy 0Q/QFG'ZEGRVKQP.
           9[LæVGM I CUCP[ RTG /QFG

          ENCUU 0Q/QFG'ZEGRVKQP GZVGPFU 'ZEGRVKQP ]
            RWDNKE 5VTKPI VQ5VTKPI
 ]
              TGVWTP DKÎT PKG CYKGTC OQF[ 
            _
          _
218                                                             Java. Sztuka programowania



Wariancje i odchylenie standardowe
      Choć podsumowanie zbioru zmiennych losowych jedną wartością, taką jak średnia lub
      mediana wydaje się być bardzo przekonujące, takie podejście nie zapewnia mo liwości
      wykonania wyczerpującej analizy danych. Czasem nawet takie rozwiązanie mo e być
      mylące. Je eli próbka zawiera na przykład wartości skrajne, wtedy średnia i mediana
      nie reprezentuje jej w wystarczający sposób. Oto przykład
          10 11 9 1 0 2 3 12 11 10

      Średnia wynosi 6,9, ale wartość ta raczej jest niedostateczną reprezentacją próbki, po-
      niewa adna ze zmiennych losowych nie jest nawet w przybli eniu równa średniej.
      Problem polega na tym, i średnia nie przekazuje informacji na temat wariacji lub roz-
      kładu danych. Dobrze jest znać odstępy pomiędzy wartościami poszczególnych zmien-
      nych losowych. W ten sposób lepiej mo na zinterpretować średnią, medianę i modę.

      Aby znaleźć stopień zmienności próbki, trzeba obliczyć odchylenie standardowe. Od-
      chylenie standardowe uzyskiwane jest po obliczeniu wariancji. Obie wartości określają
      rozkład danych w zbiorze. Z tych dwóch współczynników odchylenie standardowe
      jest wa niejsze, gdy wyznacza średnią odległość pomiędzy wartościami zmiennych
      losowych a średnią.

      Wariancję oblicza się z następującego wzoru.



      W powy szym wzorze N jest liczbą elementów, M jest średnią a Di — to wartości
      poszczególnych zmiennych losowych w próbie. Konieczne jest podnoszenie wyniku
      do kwadratu, aby uzyskiwać tylko wartości dodatnie. Je eli wzór nie uwzględniałby
      podnoszenia do kwadratu, wynik często wynosiłby zero.

      Odchylenie standardowe znajduje się obliczając pierwiastek kwadratowy wariancji.
      Z tego powodu wzór na odchylenie standardowe ma następującą postać.




      Jak ju wspomniano wcześniej, odchylenie standardowe jest bardziej przydatne od
      wariancji. Warto rozwa yć następujący zbiór:
          11 20 40 30 99 30 50

      Wariancję określa się jako średnią arytmetyczną kwadratów odchyleń poszczególnych
      wartości zmiennych od ich wartości średniej (zobacz tabelę na następnej stronie).

      Z powy szej tabeli wynika, i średnia kwadratów ró nic wartości zmiennych losowych
      od ich wartości średniej wynosi 717,43. Aby znaleźć teraz odchylenie standardowe,
      wystarczy znaleźć pierwiastek kwadratowy wariancji. Wynosi on około 26,78. Od-
      chylenie standardowe określa średnią odległość poszczególnych punktów od średniej
      wartości wszystkich elementów.
Rozdział 8. ♦ Statystyka i wykresy                                                       219


         Di                           Di–M                       (Di–M)2
         11                           –29                        841
         20                           –20                        400
         40                           0                          0
         30                           –10                        100
         99                           59                         3481
         30                           –10                        100
         50                           10                         100
                                      Suma:                      5022
                                      Średnia sumy:              717.43

        Odchylenie standardowe informuje o tym, czy wartość średniej dla elementów dobrze
        reprezentuje zbiór. Jeśli na przykład kupiono fabrykę batoników a kierownik informuje
        o tym, i w poprzednim miesiącu wyprodukowano średnio 2 500 batoników dziennie
        ale odchylenie standardowe wyniosło 2 000, nale y się zastanowić nad poprawą linii
        produkcyjnej.

        Oto bardzo wa na zasada. Przy zało eniu, i dane stosują się do rozkładu normalnego,
        około 68% zmiennych losowych znajdzie się w pojedynczym odchyleniu standardowym
        od średniej a koło 95% znajdzie się w podwójnym odchyleniu standardowym.

        Przedstawiona poni ej metoda UVFGX
 oblicza odchylenie standardowe dla tablicy
        wartości.
           YTCEC QFEJ[NGPKG UVCPFCTFQYG DKQTW YCTVQ EK
          RWDNKE UVCVKE FQWDNG UVFGX
FQWDNG=? XCNU ]
            FQWDNG UVF  
            FQWDNG CXI  OGCP
XCNU

              HQT
KPV K K  XCNUNGPIVJ K


                UVF 
 
XCNU=K?CXI
XCNU=K?CXI

              UVF  XCNUNGPIVJ
              UVF  /CVJUSTV
UVF

              TGVWTP UVF
          _




Równanie regresji
        Jednym z najczęstszych zastosowań statystyki jest prognozowanie przyszłości. Choć
        dane pochodzące z przeszłości nie zawsze pozwalają na przewidywanie przyszłości,
        często korzysta się z tak zwanej analizy trendu. Prawdopodobnie najbardziej rozpo-
        wszechnionym narzędziem do tego rodzaju analizy jest równanie regresji. Równanie
        to opisuje związek dwóch wartości, które wchodzą w skład dwuwymiarowej zmiennej
        losowej. Często linię tę nazywa się linią najmniejszych kwadratów.
220                                                           Java. Sztuka programowania


      Przed zaprezentowaniem odpowiedniego wzoru warto przypomnieć, i linia prosta
      w dwóch wymiarach jest opisywana następującym równaniem
           Y = a + bX

      W tym przypadku X jest zmienną niezale ną, Y jest zmienną zale ną, a opisuje wartość
      przesunięcia na osi Y a b — stopień nachylenia linii. Aby w pełni określić poło enie
      linii w układzie współrzędnych, trzeba odnaleźć wartości współczynników a i b.

      Aby znaleźć równanie regresji, mo na skorzystać z metody najmniejszych kwadratów.
      Ogólnie pomysł polega na tym, by odnaleźć linię, która zminimalizuje sumę kwadratów
      odchyleń między poszczególnymi danymi a linią. Znalezienie tego równania wymaga
      dwóch kroków. Najpierw oblicza się wartość b, u ywając wzoru:




      W powy szym wzorze Mx jest wartością średnią współrzędnej X, My — średnią współ-
      rzędnej Y. Po obliczeniu b wartość a oblicza się z następującego wzoru.
           a = My – bMx

      Po określeniu równania regresji liniowej mo na u yć dowolnej wartości X i wskazać
      dla niej przewidywaną wartość Y.

      Aby zrozumieć znaczenie linii regresji, mo na rozwa yć następujący przykład. Załó my,
       e mamy dostęp do średnich wartości akcji firmy XYZ w przeciągu ostatnich 10 lat.
      Oto zebrane dane:

       Rok                Cena
       0                  68
       1                  75
       2                  74
       3                  80
       4                  81
       5                  85
       6                  82
       7                  87
       8                  91
       9                  94

      Równanie regresji dla tych danych jest następujące.
           Y = 70,22 + 2,55 X
Rozdział 8. ♦ Statystyka i wykresy                                                        221


        Dane i linię regresji przedstawiono na rysunku 8.1. Jak wynika z rysunku, linia regre-
        sji jest nachylona do góry. Oznacza to tendencję wzrostową akcji firmy XYZ. Warto
        tak e zauwa yć, i punkty reprezentujące zmienne losowe (dane) są poło one bardzo
        blisko linii regresji. Analizując przebieg linii mo na przewidzieć, i w roku 11 cena
        akcji wzrośnie do 98,27. Aby uzyskać tę wartość, wystarczy w równaniu regresji za-
        miast X wstawić wartość 11. Oczywiście rozwiązanie to ma jedną wadę — to tylko
        przewidywanie. Nie ma gwarancji, i rzeczywiście cena akcji za dwa lata będzie do-
        kładnie taka.

Rysunek 8.1.
Wykres średnich cen
i linia regresji




Współczynnik korelacji
        Choć linia regresji z rysunku 8.1 wydaje się wskazywać tendencję wzrostową, nie wia-
        domo, z jakim stopniem dokładności odwzorowuje ona zebrane dane. Je eli dane i linia
        regresji są ze sobą słabo powiązane, wykres regresji liniowej nie jest dobrym wskaź-
        nikiem. Je eli jednak punkty reprezentujące dane le ą dokładnie na linii wykresu, ma
        on du ą wartość.

        Aby określić znaczenie otrzymanej linii regresji, najczęściej oblicza się współczynnik
        korelacji, który mo e przyjmować wartości od –1 do 1. Współczynnik ten opisuje siłę
        liniowego związku między dwiema zmiennymi. Brzmi to być mo e dziwnie, ale jest
        to bardzo proste zagadnienie. Graficznie współczynnik korelacji jest związany z odle-
        głością poszczególnych punktów reprezentujących dane (zmienne losowe) od linii,
        stanowiącej wykres regresji. Je eli współczynnik wynosi 1, dane są doskonale dopa-
        sowane do linii (doskonała korelacja dodatnia). Wartość 0 oznacza brak związku
        między linią a danymi (w takim przypadku ka da dowolna linia prosta byłaby równie
        dobra jak rozwa ana). Znak korelacji jest taki sam jak współczynnik nachylenia linii
        (wartość b). Je eli współczynnik ten jest dodatni, oznacza to bezpośredni związek
        zmiennej zale nej od zmiennej niezale nej. Dla ujemnego współczynnika występuje
        związek odwrotny.

        Wzór słu ący do obliczania współczynnika korelacji jest następujący.
222                                                              Java. Sztuka programowania


      We wzorze Mx oznacza średnią współrzędnej X, My — średnią współrzędnej Y. Znak
      współczynnika zale y od nachylenia linii regresji. Ogólnie wartość wynosząca 0,81
      lub więcej jest traktowana jako silny związek. Oznacza to, i około 66% danych jest
      dopasowanych do linii regresji. Aby zamienić współczynnik na wartość procentową,
      wystarczy podnieść go do kwadratu i pomno yć przez 100. Uzyskana w ten sposób
      wartość jest nazywana współczynnikiem determinacji.

      Metoda TGITGUU
 przedstawiona poni ej oblicza równanie regresji oraz współczyn-
      nik korelacji.
1DNKECPKG TGITGULK K YURÎ E[PPKM MQTGNCELK
           FNC RQFCPGIQ DKQTW YCTVQ EK 9CTVQ EK TGRTGGPVWLæ
           YURÎ TúFPæ ; 9URÎ TúFPæ : LGUV ECU
           
KPMTGOGPVCELC Q LGFGP Y MC F[O MTQMW
RWDNKE UVCVKE 4GICVC TGITGUU
FQWDNG=? XCNU ]
          FQWDNG C D [#XI Z#XI VGOR VGOR EQT
          FQWDNG XCNU=?  PGY FQWDNG=XCNUNGPIVJ?

             7VYQTGPKG HQTOCVW NKEDQYGIQ  FYQOC E[HTCOK RQ RTGEKPMW
            0WODGT(QTOCV PH  0WODGT(QTOCVIGV+PUVCPEG

            PHUGV/CZKOWO(TCEVKQPKIKVU


             PCNGKGPKG TGFPKGL YCTVQ EK ;
            [#XI  OGCP
XCNU

             PCNGKGPKG TGFPKGL MQORQPGPVW :
            Z#XI  
            HQT
KPV K K  XCNUNGPIVJ K

 Z#XI 
 K
            Z#XI  XCNUNGPIVJ

             PCNGKGPKG D
            VGOR  VGOR  
            HQT
KPV K K  XCNUNGPIVJ K

 ]
              VGOR 
 
XCNU=K?[#XI
KZ#XI
              VGOR 
 
KZ#XI
KZ#XI
            _

            D  VGORVGOR

             PCNGKGPKG C
            C  [#XI  
D
Z#XI

             1DNKEGPKG YURÎ E[PPKMÎY MQTGNCELK
            HQT
KPV K K  XCNUNGPIVJ K

 XCNU=K?  K

            EQT  VGORXCNUNGPIVJ
            EQT  UVFGX
XCNU
UVFGX
XCNU

            TGVWTP PGY 4GICVC
C D EQT ;  
                               PHHQTOCV
C 
  
 
                               PHHQTOCV
D
: 
        _

      Nale y podkreślić, i metoda opiera się na zało eniu, e zmienną niezale ną (X) jest
      czas. Z tego powodu w ka dym kroku zwiększa wartość tej zmiennej o 1. Średnia
      wartości X jest obliczana następującymi poleceniami.
Rozdział 8. ♦ Statystyka i wykresy                                                         223


           PCNGKGPKG TGFPKGL MQORQPGPVW :
          Z#XI  
          HQT
KPV K K  XCNUNGPIVJ K

 Z#XI 
 K
          Z#XI  XCNUNGPIVJ

        Wartości od 0 do liczby elementów są ze sobą sumowane a następnie wynik tej operacji
        jest dzielony przez liczbę elementów. W ten sposób powstaje średnia X.

        Oś X oznacza czas, zatem często taką analizę nazywa się analizą czasową. Wartością
        odniesienia podczas próbkowania jest czas, zatem do metody przekazuje się tylko jedną
        tablicę. Mo liwe jest stosowanie dwóch tablic: jednej dla wartości X i jednej dla warto-
        ści Y, ale taki sposób działania nie jest rozpatrywany w niniejszym rozdziale.

        Metoda TGITGUU
 zwraca wartości a i b, tekstową reprezentację równania regresji
        i współczynnik korelacji, wszystkie dane zostają umieszczone w obiekcie 4GICVC.
        Klasę tego obiektu przedstawiono poni ej.
           6C MNCUC RTGEJQYWLG FCPG CPCNK[ TGITGU[LPGL
          ENCUU 4GICVC ]
            RWDNKE FQWDNG C D
            RWDNKE FQWDNG EQT
            RWDNKE 5VTKPI GSWCVKQP

              RWDNKE 4GICVC
FQWDNG K FQWDNG L FQWDNG M 5VTKPI UVT ]
                C  K
                D  L
                EQT  M
                GSWCVKQP  UVT
              _
          _




Cała klasa Stats
        Wszystkie metody statystyczne znajdują się w jednej klasie 5VCVU, której kod przed-
        stawiono poni ej. W tym samym pliku źródłowym umieszczono tak e klasy 4GICVC
        i 0Q/QFG'ZEGRVKQP.
          KORQTV LCXCWVKN
KORQTV LCXCVGZV
6C MNCUC RTGEJQYWLG FCPG CPCNK[ TGITGU[LPGL
          ENCUU 4GICVC ]
            RWDNKE FQWDNG C D
            RWDNKE FQWDNG EQT
            RWDNKE 5VTKPI GSWCVKQP

              RWDNKE 4GICVC
FQWDNG K FQWDNG L FQWDNG M 5VTKPI UVT ]
                C  K
                D  L
                EQT  M
                GSWCVKQP  UVT
              _
          _
224                                                            Java. Sztuka programowania


       9[LæVGM I CUCP[ RTG /QFG

      ENCUU 0Q/QFG'ZEGRVKQP GZVGPFU 'ZEGRVKQP ]
        RWDNKE 5VTKPI VQ5VTKPI
 ]
          TGVWTP DKÎT PKG CYKGTC OQF[ 
        _
      _

       1IÎNPC MNCUC UVCV[UV[M
      RWDNKE ENCUU 5VCVU ]
         YTCEC TGFPKæ RQFCP[EJ YCTVQ EK
        RWDNKE UVCVKE FQWDNG OGCP
FQWDNG=? XCNU ]
          FQWDNG CXI  

            HQT
KPV K K  XCNUNGPIVJ K


              CXI 
 XCNU=K?

            CXI  XCNUNGPIVJ

            TGVWTP CXI
        _

        YTCEC OGFKCPú RQFCP[EJ YCTVQ EK
       RWDNKE UVCVKE FQWDNG OGFKCP
FQWDNG=? XCNU ]
         FQWDNG VGOR=?  PGY FQWDNG=XCNUNGPIVJ?

            5[UVGOCTTC[EQR[
XCNU  VGOR  XCNUNGPIVJ

            #TTC[UUQTV
VGOR  UQTVQYCPKG FCP[EJ

             YTÎEGPKG YCTVQ EK TQFMQYGL
            KH

XCNUNGPIVJ  ]
               ,G NK PKGRCT[UVC NKEDC YCTVQ EK PCLF   TGFPKæ
              TGVWTP 
VGOR=VGORNGPIVJ? 
                      VGOR=
VGORNGPIVJ? 
            _ GNUG TGVWTP
              VGOR=VGORNGPIVJ?
        _
YTCEC OQFú 
FQOKPCPVú FNC RQFCP[EJ YCTVQ EK
          9[LæVGM 0Q/QFG'ZEGRVKQP LGUV I CUCP[ YVGF[ IF[
           CFPC  NKED PKG Y[UVúRWLG Eú EKGL QF RQQUVC [EJ
          )F[ FYKG NWD YKúEGL YCTVQ EK RQLCYKC UKú TÎYPKG EúUVQ
          YTCECPC LGUV V[NMQ RKGTYUC  PKEJ
RWDNKE UVCVKE FQWDNG OQFG
FQWDNG=? XCNU
           VJTQYU 0Q/QFG'ZEGRVKQP
       ]
         FQWDNG O OQFG8CN  
         KPV EQWPV QNFEQWPV  

            HQT
KPV K K  XCNUNGPIVJ K

 ]
              O  XCNU=K?
              EQWPV  

              NKECPKG Y[UVúRQYC RQUEGIÎNP[EJ YCTVQ EK
             HQT
KPV LK
 L  XCNUNGPIVJ L


               KH
O  XCNU=L? EQWPV
Rozdział 8. ♦ Statystyka i wykresy                                               225
,G NK VC YCTVQ è Y[UVúRWLG Eú EKGL PK RQRTGFPKG
                       CRCOKúVCL Læ
KH
EQWPV QNFEQWPV ]
                      OQFG8CN  O
                      QNFEQWPV  EQWPV
                    _
                _

                KH
QNFEQWPV  
                  VJTQY PGY 0Q/QFG'ZEGRVKQP

                GNUG
                  TGVWTP OQFG8CN
            _

             YTCEC QFEJ[NGPKG UVCPFCTFQYG DKQTW YCTVQ EK
            RWDNKE UVCVKE FQWDNG UVFGX
FQWDNG=? XCNU ]
              FQWDNG UVF  
              FQWDNG CXI  OGCP
XCNU

                HQT
KPV K K  XCNUNGPIVJ K


                  UVF 
 
XCNU=K?CXI
XCNU=K?CXI

                UVF  XCNUNGPIVJ
                UVF  /CVJUSTV
UVF

                TGVWTP UVF
            _
1DNKECPKG TGITGULK K YURÎ E[PPKMC MQTGNCELK
               FNC RQFCPGIQ DKQTW YCTVQ EK 9CTVQ EK TGRTGGPVWLæ
               YURÎ TúFPæ ; 9URÎ TúFPæ : LGUV ECU
               
KPMTGOGPVCELC Q LGFGP Y MC F[O MTQMW
RWDNKE UVCVKE 4GICVC TGITGUU
FQWDNG=? XCNU ]
              FQWDNG C D [#XI Z#XI VGOR VGOR EQT
              FQWDNG XCNU=?  PGY FQWDNG=XCNUNGPIVJ?

                 7VYQTGPKG HQTOCVW NKEDQYGIQ  FYQOC E[HTCOK RQ RTGEKPMW
                0WODGT(QTOCV PH  0WODGT(QTOCVIGV+PUVCPEG

                PHUGV/CZKOWO(TCEVKQPKIKVU


                 PCNGKGPKG TGFPKGL YCTVQ EK ;
                [#XI  OGCP
XCNU

                 PCNGKGPKG TGFPKGL MQORQPGPVW :
                Z#XI  
                HQT
KPV K K  XCNUNGPIVJ K

 Z#XI 
 K
                Z#XI  XCNUNGPIVJ

                 PCNGKGPKG D
                VGOR  VGOR  
                HQT
KPV K K  XCNUNGPIVJ K

 ]
                  VGOR 
 
XCNU=K?[#XI
KZ#XI
                  VGOR 
 
KZ#XI
KZ#XI
                _

                D  VGORVGOR
226                                                                  Java. Sztuka programowania


                 PCNGKGPKG C
                C  [#XI  
D

Weitere ähnliche Inhalte

Was ist angesagt?

Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQWydawnictwo Helion
 
Asembler. Sztuka programowania
Asembler. Sztuka programowaniaAsembler. Sztuka programowania
Asembler. Sztuka programowaniaWydawnictwo Helion
 
Hack Proofing Your Web Applications. Edycja polska
Hack Proofing Your Web Applications. Edycja polskaHack Proofing Your Web Applications. Edycja polska
Hack Proofing Your Web Applications. Edycja polskaWydawnictwo Helion
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaWydawnictwo Helion
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWydawnictwo Helion
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programistyWydawnictwo Helion
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaWydawnictwo Helion
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceWydawnictwo Helion
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki startWydawnictwo Helion
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerWydawnictwo Helion
 
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykJęzyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykWydawnictwo Helion
 

Was ist angesagt? (20)

C#. Leksykon kieszonkowy
C#. Leksykon kieszonkowyC#. Leksykon kieszonkowy
C#. Leksykon kieszonkowy
 
Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQ
 
Delphi. Szybki start
Delphi. Szybki startDelphi. Szybki start
Delphi. Szybki start
 
Pajączek 5 NxG
Pajączek  5 NxGPajączek  5 NxG
Pajączek 5 NxG
 
Uczta programistów
Uczta programistówUczta programistów
Uczta programistów
 
Java. Tworzenie gier
Java. Tworzenie gierJava. Tworzenie gier
Java. Tworzenie gier
 
Asembler. Sztuka programowania
Asembler. Sztuka programowaniaAsembler. Sztuka programowania
Asembler. Sztuka programowania
 
Hack Proofing Your Web Applications. Edycja polska
Hack Proofing Your Web Applications. Edycja polskaHack Proofing Your Web Applications. Edycja polska
Hack Proofing Your Web Applications. Edycja polska
 
C++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowaniaC++. Styl i technika zaawansowanego programowania
C++. Styl i technika zaawansowanego programowania
 
JavaScript dla każdego
JavaScript dla każdegoJavaScript dla każdego
JavaScript dla każdego
 
Java. Wprowadzenie
Java. WprowadzenieJava. Wprowadzenie
Java. Wprowadzenie
 
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązańWyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programisty
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. Encyklopedia
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
 
JavaScript. Projekty
JavaScript. ProjektyJavaScript. Projekty
JavaScript. Projekty
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykJęzyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
 

Andere mochten auch

Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...
Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...
Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...RPOWSL
 
Prospekt emisyjny LOTOS S.A.
Prospekt emisyjny LOTOS S.A.Prospekt emisyjny LOTOS S.A.
Prospekt emisyjny LOTOS S.A.Stockradar
 
Wykonywanie aparatów jednoszczękowych
  Wykonywanie aparatów jednoszczękowych  Wykonywanie aparatów jednoszczękowych
Wykonywanie aparatów jednoszczękowychDawid Bogocz
 
Program VIP-Innowacyjna Stolarka
Program VIP-Innowacyjna StolarkaProgram VIP-Innowacyjna Stolarka
Program VIP-Innowacyjna Stolarkainfookno
 

Andere mochten auch (12)

10
1010
10
 
Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...
Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...
Rola Specjalnych Stref Ekonomicznych w kreowaniu rozwoju gospodarczego. Funkc...
 
Jak pelnic mandat_radnego
Jak pelnic mandat_radnegoJak pelnic mandat_radnego
Jak pelnic mandat_radnego
 
Prog Naucz Sp
Prog Naucz SpProg Naucz Sp
Prog Naucz Sp
 
Wentylacja
WentylacjaWentylacja
Wentylacja
 
Grafika inżynierska
Grafika inżynierskaGrafika inżynierska
Grafika inżynierska
 
Prospekt emisyjny LOTOS S.A.
Prospekt emisyjny LOTOS S.A.Prospekt emisyjny LOTOS S.A.
Prospekt emisyjny LOTOS S.A.
 
Wykonywanie aparatów jednoszczękowych
  Wykonywanie aparatów jednoszczękowych  Wykonywanie aparatów jednoszczękowych
Wykonywanie aparatów jednoszczękowych
 
Przedszkole
PrzedszkolePrzedszkole
Przedszkole
 
Program VIP-Innowacyjna Stolarka
Program VIP-Innowacyjna StolarkaProgram VIP-Innowacyjna Stolarka
Program VIP-Innowacyjna Stolarka
 
Procesy w firmie, wstęp do BPM - Manage or Die Inspiration
Procesy w firmie, wstęp do BPM - Manage or Die InspirationProcesy w firmie, wstęp do BPM - Manage or Die Inspiration
Procesy w firmie, wstęp do BPM - Manage or Die Inspiration
 
Prezentacja emocje
Prezentacja emocjePrezentacja emocje
Prezentacja emocje
 

Ähnlich wie Java. Sztuka programowania

JavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanieJavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanieWydawnictwo Helion
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyWydawnictwo Helion
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieWydawnictwo Helion
 
J2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie IIJ2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie IIWydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanieWydawnictwo Helion
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyWydawnictwo Helion
 
Java. Programowanie, biblioteki open-source i pomysły na nowe projekty
Java. Programowanie, biblioteki open-source i pomysły na nowe projektyJava. Programowanie, biblioteki open-source i pomysły na nowe projekty
Java. Programowanie, biblioteki open-source i pomysły na nowe projektyWydawnictwo Helion
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wydawnictwo Helion
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduWydawnictwo Helion
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIWydawnictwo Helion
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowaneWydawnictwo Helion
 

Ähnlich wie Java. Sztuka programowania (20)

JavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanieJavaScript. Zaawansowane programowanie
JavaScript. Zaawansowane programowanie
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalisty
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. Programowanie
 
J2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie IIJ2EE. Vademecum profesjonalisty. Wydanie II
J2EE. Vademecum profesjonalisty. Wydanie II
 
J2ME. Praktyczne projekty
J2ME. Praktyczne projektyJ2ME. Praktyczne projekty
J2ME. Praktyczne projekty
 
Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programisty
 
Java. Programowanie, biblioteki open-source i pomysły na nowe projekty
Java. Programowanie, biblioteki open-source i pomysły na nowe projektyJava. Programowanie, biblioteki open-source i pomysły na nowe projekty
Java. Programowanie, biblioteki open-source i pomysły na nowe projekty
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
 
J2ME. Almanach
J2ME. AlmanachJ2ME. Almanach
J2ME. Almanach
 
ABC Delphi 2006
ABC Delphi 2006ABC Delphi 2006
ABC Delphi 2006
 
PHP w mgnieniu oka
PHP w mgnieniu okaPHP w mgnieniu oka
PHP w mgnieniu oka
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
 
JavaScript i DHTML. Receptury
JavaScript i DHTML. RecepturyJavaScript i DHTML. Receptury
JavaScript i DHTML. Receptury
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowane
 

Mehr von Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

Mehr von Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Java. Sztuka programowania

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Java. Sztuka programowania KATALOG KSI¥¯EK Autorzy: Herbert Schildt, James Holmes KATALOG ONLINE T³umaczenie: Rafa³ Joñca ISBN: 83-7361-422-2 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: The Art of Java Format: B5, stron: 324 TWÓJ KOSZYK Przejd na wy¿szy poziom programowania dziêki dwóm „guru” Javy: Herbowi DODAJ DO KOSZYKA Schildtowi i Jamesowi Holmesowi. Po³¹czenie ich wiedzy pozwoli Ci poznaæ wiele sekretów i sztuczek wykorzystywanych przez profesjonalistów. W ksi¹¿ce autorzy przedstawiaj¹ przyk³ady u¿ytecznych aplikacji oraz towarzysz¹ce im opisy u¿ytych CENNIK I INFORMACJE technologii. Prezentowane przyk³ady mo¿esz wykorzystaæ w swojej codziennej pracy. Pocz¹wszy od interpreterów jêzyka, agentów internetowych i podsystemów e-mail, ZAMÓW INFORMACJE skoñczywszy na analizatorach wyra¿eñ, narzêdziach statystycznych i apletach O NOWO CIACH finansowych — wszystkie aplikacje s¹ gotowe do u¿ycia. Mo¿na je te¿ dowolnie modyfikowaæ i rozszerzaæ. ZAMÓW CENNIK W ksi¹¿ce znajdziesz: • Omówienie zalet jêzyka Java, CZYTELNIA • Tworzenie analizatora wyra¿eñ numerycznych, • Tworzenie agenta przeszukuj¹cego internet, FRAGMENTY KSI¥¯EK ONLINE • Projektowanie i implementacja interpretera jêzyka programowania, • Wykonanie funkcjonalnego systemu pocztowego, • Konstruowanie programu do pobierania danych z internetu z mo¿liwo ci¹ pobierania fragmentów stron, • Wykonanie narzêdzi statystycznych obliczaj¹cych rednia, medianê, modaln¹, odchylenie standardowe, itp. • Wykonanie apletów i serwletów finansowych obliczaj¹cych równe raty po¿yczki, przysz³¹ warto æ inwestycji, kwotê emerytury, itp. • Prze ledzenie ró¿nych technik wyszukiwania bazuj¹cych na sztucznej inteligencji, • Zapoznanie siê z mo¿liwo ci¹ przegl¹dania stron HTML-a w Javie. O autorach: Wydawnictwo Helion Herb Schildt jest jednym z najpopularniejszych autorów ksi¹¿ek o programowaniu. ul. Chopina 6 Jest autorytetem w sprawach jêzyków C, C++, Java i C#, a tak¿e doskona³ym 44-100 Gliwice programist¹ systemu Windows. Jego ksi¹¿ki sprzeda³y siê na ca³ym wiecie tel. (32)230-98-63 w ponad 3 milionach egzemplarzy i zosta³y przet³umaczone na wiêkszo æ jêzyków. e-mail: helion@helion.pl James Holmes jest konsultantem do spraw tworzenia programowania oraz aplikacji serwerowych w rodowiskach biznesowych. Zdoby³ wiele nagród, miêdzy innymi Summer Olympic Games oraz nagrodê Java Developer w roku 2002, przyznawan¹ przez Oracle Magazine.
  • 2. Spis treści O Autorach ........................................................................................ 7 Przedmowa........................................................................................ 9 Rozdział 1. Geniusz Javy .................................................................................... 13 Typy proste i obiekty — odpowiednia równowaga ..........................................................14 Zarządzanie pamięcią przez usuwanie niepotrzebnych obiektów.....................................15 Elegancki i prosty model wielowątkowy ..........................................................................16 W pełni zintegrowane wyjątki...........................................................................................16 Zaakcentowanie znaczenia polimorfizmu.........................................................................17 Przenośność i bezpieczeństwo dzięki kodowi bajtowemu................................................18 Bogactwo interfejsów programistycznych Javy................................................................18 Aplet ..................................................................................................................................19 Ciągła rewolucja................................................................................................................20 Rozdział 2. Rekurencyjny analizator wyrażeń ...................................................... 21 Wyra enia..........................................................................................................................22 Analiza wyra eń — problem.............................................................................................22 Przetwarzanie wyra enia...................................................................................................23 Rozbijanie wyra enia ........................................................................................................25 Prosty analizator wyra eń .................................................................................................28 Opis działania analizatora ...........................................................................................34 Dodawanie zmiennych do analizatora...............................................................................35 Sprawdzanie składni w analizatorze rekurencyjnym ........................................................43 Aplet kalkulatora ...............................................................................................................44 Mo liwe modyfikacje........................................................................................................46 Rozdział 3. Implementacja interpreterów języków w Javie................................... 47 Jaki język programowana interpretować? .........................................................................48 Wstęp do interpretera ........................................................................................................49 Interpreter języka SBASIC................................................................................................50 Analizator wyra eń języka SBASIC .................................................................................67 Wyra enia w SBASIC ................................................................................................67 Tokeny SBASIC .........................................................................................................68 Interpreter ..........................................................................................................................72 Klasa InterpreterException .........................................................................................72 Konstruktor klasy SBasic............................................................................................72 Słowa kluczowe ..........................................................................................................74 Metoda run() ...............................................................................................................75 Metoda sbInterp()........................................................................................................76 Przypisanie..................................................................................................................77
  • 3. 4 Java. Sztuka programowania Instrukcja PRINT ........................................................................................................78 Instrukcja INPUT........................................................................................................79 Instrukcja GOTO ........................................................................................................80 Instrukcja IF ................................................................................................................83 Pętla FOR....................................................................................................................83 Instrukcja GOSUB ......................................................................................................86 Instrukcja END ...........................................................................................................87 Wykorzystanie języka SBASIC ........................................................................................87 Inne przykładowe programy języka SBASIC.............................................................88 Rozszerzanie interpretera ..................................................................................................90 Tworzenie własnego języka programowania ....................................................................90 Rozdział 4. Wykonanie menedżera pobierania plików w Javie .............................. 91 Sposoby pobierania plików z internetu .............................................................................92 Omówienie programu........................................................................................................92 Klasa Download ................................................................................................................93 Zmienne pobierania ....................................................................................................97 Konstruktor klasy........................................................................................................97 Metoda download().....................................................................................................97 Metoda run() ...............................................................................................................97 Metoda stateChanged() .............................................................................................101 Metody akcesorowe i działań....................................................................................101 Klasa ProgressRenderer ..................................................................................................101 Klasa DownloadsTableModel .........................................................................................102 Metoda addDownload() ............................................................................................104 Metoda clearDownload() ..........................................................................................105 Metoda getColumnClass() ........................................................................................105 Metoda getValueAt() ................................................................................................105 Metoda update() ........................................................................................................106 Klasa DownloadManager................................................................................................106 Zmienne klasy DownloadManager ...........................................................................111 Konstruktor klasy......................................................................................................112 Metoda verifyUrl()....................................................................................................112 Metoda tableSelectionChanged()..............................................................................113 Metoda updateButtons()............................................................................................113 Obsługa zdarzeń akcji ...............................................................................................114 Kompilacja i uruchamianie programu.............................................................................115 Rozszerzanie mo liwości programu................................................................................115 Rozdział 5. Implementacja klienta e-mail w Javie ............................................. 117 Poczta elektroniczna od podszewki.................................................................................118 POP3 .........................................................................................................................118 IMAP.........................................................................................................................118 SMTP ........................................................................................................................118 Ogólna procedura wysyłania lub odbierania wiadomości e-mail .............................119 Interfejs programistyczny JavaMail ................................................................................119 Ogólny opis wykorzystania biblioteki ......................................................................120 Prosty klient poczty elektronicznej .................................................................................121 Klasa ConnectDialog ................................................................................................122 Klasa DownloadingDialog........................................................................................127 Klasa MessageDialog................................................................................................128 Klasa MessageTableModel.......................................................................................134 Klasa EmailClient .....................................................................................................138 Kompilacja i uruchamianie klienta poczty......................................................................153 Rozszerzanie mo liwości klienta ....................................................................................154
  • 4. Spis treści 5 Rozdział 6. Przeszukiwanie sieci za pomocą Javy.............................................. 155 Podstawy funkcjonowania agenta internetowego ...........................................................156 Omówienie protokołu robot ............................................................................................157 Wprowadzenie do agenta wyszukiwania ........................................................................158 Klasa SearchCrawler .......................................................................................................158 Zmienne klasy...........................................................................................................173 Konstruktor klasy SearchCrawler .............................................................................173 Metoda actionSearch() ..............................................................................................174 Metoda search() ........................................................................................................176 Metoda showError()..................................................................................................179 Metoda updateStats() ................................................................................................179 Metoda addMatch()...................................................................................................180 Metoda verifyUrl()....................................................................................................180 Metoda isRobotAllowed() ........................................................................................181 Metoda downloadPage() ...........................................................................................183 Metoda removeWwwFromUrl() ...............................................................................184 Metoda retrieveLinks() .............................................................................................185 Metoda searchStringMatches() .................................................................................191 Metoda crawl()..........................................................................................................192 Kompilacja i uruchomienie programu.............................................................................194 Mo liwe zastosowania agentów internetowych..............................................................196 Rozdział 7. Rendering HTML w Javie ................................................................ 197 Rendering HTML w edytorze JEditorPane.....................................................................197 Obsługa zdarzeń łączy.....................................................................................................198 Tworzenie prostej przeglądarki internetowej..................................................................199 Klasa MiniBrowser ...................................................................................................199 Zmienne klasy MiniBrowser.....................................................................................204 Konstruktor klasy......................................................................................................205 Metoda actionBack().................................................................................................205 Metoda actionForward() ...........................................................................................206 Metoda actionGo() ....................................................................................................206 Metoda showError()..................................................................................................207 Metoda verifyUrl()....................................................................................................207 Metoda showPage() ..................................................................................................207 Metoda updateButtons()............................................................................................209 Metoda hyperlinkUpdate()........................................................................................210 Kompilacja i uruchomienie przeglądarki ........................................................................210 Zastosowania renderingu HTML ....................................................................................211 Rozdział 8. Statystyka i wykresy ..................................................................... 213 Próbki, zbiory, rozkład i zmienne ...................................................................................214 Podstawy statystyki .........................................................................................................215 Średnia ......................................................................................................................215 Mediana.....................................................................................................................216 Moda (dominanta).....................................................................................................216 Wariancje i odchylenie standardowe...............................................................................218 Równanie regresji............................................................................................................219 Współczynnik korelacji ............................................................................................221 Cała klasa Stats................................................................................................................223 Tworzenie wykresów ......................................................................................................226 Skalowanie danych ...................................................................................................226 Klasa Graphs.............................................................................................................227 Zmienne klasy Graphs ..............................................................................................231 Konstruktor klasy Graphs .........................................................................................232 Metoda paint()...........................................................................................................234
  • 5. 6 Java. Sztuka programowania Metoda bargraph() ....................................................................................................237 Metoda scatter() ........................................................................................................237 Metoda regplot() .......................................................................................................237 Aplikacja tworzenia statystyk .........................................................................................238 Konstruktor klasy StatsWin ......................................................................................242 Procedura obsługi itemStateChanged().....................................................................243 Metoda actionPerformed() ........................................................................................244 Metoda shutdown() ...................................................................................................244 Metoda createMenu()................................................................................................244 Klasa DataWin ..........................................................................................................244 Łączymy wszystko razem .........................................................................................245 Prosty aplet ze statystykami ............................................................................................247 Mo liwe udoskonalenia...................................................................................................249 Rozdział 9. Aplety i serwlety finansowe............................................................ 251 Znajdowanie raty kredytu................................................................................................252 Pola apletu.................................................................................................................255 Metoda init() .............................................................................................................256 Metoda actionPerformed() ........................................................................................258 Metoda paint()...........................................................................................................258 Metoda compute().....................................................................................................259 Znajdowanie przyszłej wartości inwestycji.....................................................................260 Znajdowanie wkładu początkowego wymaganego do uzyskania przyszłej wartości inwestycji ..................................................................263 Znalezienie inwestycji początkowej wymaganej do uzyskania odpowiedniej emerytury ......267 Znajdowanie maksymalnej emerytury dla danej inwestycji ...........................................271 Obliczenie pozostałej kwoty do spłaty kredytu...............................................................275 Tworzenie serwletów finansowych.................................................................................278 Serwer Tomcat ..........................................................................................................278 Konwersja apletu RegPay do serwletu .....................................................................280 Serwlet RegPayS.......................................................................................................280 Mo liwe rozszerzenia......................................................................................................283 Rozdział 10. Rozwiązywanie problemów za pomocą sztucznej inteligencji............ 285 Reprezentacja i terminologia...........................................................................................286 Rosnąca liczba kombinacji..............................................................................................287 Techniki wyszukiwania...................................................................................................288 Obliczanie wyszukiwania .........................................................................................289 Problem ...........................................................................................................................289 Reprezentacja graficzna ............................................................................................290 Klasa FlightInfo...............................................................................................................291 Wyszukiwanie w głąb .....................................................................................................291 Analiza wyszukiwania w głąb ..................................................................................300 Wyszukiwanie wszerz .....................................................................................................300 Analiza wyszukiwania wszerz ..................................................................................302 Dodanie heurystyki .........................................................................................................303 Wyszukiwanie wspinaczkowe ..................................................................................304 Analiza wyszukiwania wspinaczkowego..................................................................308 Wyszukiwanie najmniejszego kosztu .......................................................................309 Analiza wyszukiwania najmniejszego kosztu...........................................................310 Znajdowanie wielu rozwiązań.........................................................................................311 Usuwanie ście ek......................................................................................................311 Usuwanie węzłów .....................................................................................................312 Znalezienie „optymalnego” rozwiązania ........................................................................317 Powrót do zagubionych kluczy .......................................................................................321 Skorowidz...................................................................................... 325
  • 6. Rozdział 8. Statystyka i wykresy Autor: Herb Schildt Javy u ywa się przede wszystkim do tworzenia małych programów, na przykład apletów i serwletów, słu ących do przetwarzania i wyświetlania danych. Dane często są licz- bami, na przykład reprezentują ceny akcji, temperatury dzienne, ruch klientów itp. Bardzo często trzeba przetworzyć te dane lub te narysować wykres na ich podstawie. Na przykład aplet mo e wyświetlać średnią cenę akcji w przeciągu ostatnich kilku miesięcy i rysować wykres prezentujący zmiany ceny. Statystyka i wykresy bardzo często pojawiają się w trakcie pisania programów w Javie, zatem zajmiemy się nimi w tym rozdziale. W tym rozdziale zostanie pokazane wykonanie metody słu ącej do obliczania nastę- pujących statystyk: średniej; mediany; dominanty (mody, wartości modalnej); odchylenia standardowego; równania regresji (linia najlepszego dopasowania); współczynnika korelacji. W tym rozdziale poka emy tak e sposób rysowania wykresów. Przykłady tutaj przed- stawione ka dy mo e dostosować do własnych potrzeb. W niniejszym rozdziale szczególny nacisk zostanie poło ony na dwa aspekty: obli- czenia matematyczne i wyświetlanie uzyskanych wyników w sposób graficzny. Java nie jest zoptymalizowana pod kątem obliczeń matematycznych ale wspiera ró ne metody obliczeń. Choć obliczenia pokazane w tym rozdziale nie wymagają du ej mocy procesora ani nie są wysoce zło one, stanowią dobrą ilustrację mo liwych spo- sobów radzenia sobie z danymi.
  • 7. 214 Java. Sztuka programowania Java od samego początku była zaprojektowana jako język zapewniający interfejs gra- ficzny. Z tego powodu istnieje wiele klas zajmujących się interfejsami graficznymi. Java posiada aktualnie dwa systemy graficznych interfejsów u ytkownika: AWT i Swing. System Swing był dosyć intensywnie opisywany w poprzednich rozdziałach, zatem teraz warto zapoznać się z systemem AWT. Czytelnik dowie się, w jaki sposób mo na tworzyć okna AWT, jak zapewnia się obsługę zmiany ich rozmiaru, ponowne ryso- wanie okna i inne elementy. Java posiada unikalne cechy, takie jak klasy wewnętrzne i adaptory, zatem kod interfejsu graficznego w tym języku jest bardziej elegancki i krót- szy od tego samego kodu uzyskiwanego w innych językach. Próbki, zbiory, rozkład i zmienne Przed rozpoczęciem omawiania właściwego programu nale y zdefiniować kilka pod- stawowych terminów i koncepcji związanych ze statystyką. Ogólnie informacje staty- styczne otrzymuje się w postaci próbek. Następnie dokonuje się uogólnienia wyników. Ka da z próbek pochodzi z określonego zbioru wartości przewidzianych dla danej sytuacji. Stosuje tu się po prostu nazwę zbiór. Na przykład mo na szacować wielkość produkcji fabryki zapałek w przeciągu całego roku, uogólniając dane zebrane tylko w jednym dniu. W ten sposób mo na dokonać ekstrapolacji dotyczącej całego roku na podstawie znacznie skromniejszej informacji. Je eli próbka jest wyczerpująca, jest równa całemu zbiorowi. W przypadku omawia- nej, przykładowej fabryki, jeśli próbka zawiera wielkość produkcji fabryki dla całego roku, wtedy jest ona równa całemu zbiorowi. Jeśli próbka jest mniejsza od całego zbioru, jest mo liwe wystąpienie błędu. Wtedy nale y znać współczynnik określający wielkość błędu. Na potrzeby niniejszego rozdziału zakłada się, i próbka jest równa zbiorowi, więc nie występują błędy statystyczne. Informacje statystyczne zale ą od rozkładu zmiennych losowych w zbiorze. Mo liwych jest kilka ró nych rodzajów rozkładów prawdopodobieństwa przyjmowania wartości przez zmienne losowe. Najbardziej znanym jest rozkład normalny, czyli rozkład Gaussa, którego reprezentacją jest tzw. krzywa dzwonowa. Rozkład analizowanych wartości przyjmuje kształt symetrycznego dzwonu. Oznacza to, e zmienne losowe o wartości zbli onej do przeciętnej występują najczęściej. W trakcie badania statystycznego określa się zmienne zale ne (badane) i zmienne niezale ne (ich wartość pozwala wyliczyć zmienną zale ną). W tym rozdziale zmienną niezale ną jest czas. Zmienna ta jest zwiększana w ka dym roku o wartość jednost- kową. Zastosowanie czasu jako zmiennej niezale nej jest powszechnym zjawi- skiem. Na przykład przy badaniu kursów stosuje się zmienną niezale ną z odstę- pem jeden dzień.
  • 8. Rozdział 8. ♦ Statystyka i wykresy 215 Podstawy statystyki U podstawy większości analiz statystycznych występują trzy parametry badanych prób: średnia, mediana i moda (dominanta). Ka dy z wymienionych współczynników jest u yteczny ale dopiero ich połączenie pozwala na dokładne przeanalizowanie charak- terystyki próbki. Metody statystyczne opisywane w niniejszym rozdziale opierają się na zało eniu, i zmienne losowe, składające się na próbkę znajdują się w tablicy zmiennych typu FQWDNG. Wszystkie metody statystyczne są metodami typu UVCVKE przechowywanymi w klasie 5VCVU. Klasę tą w całości przedstawimy w dalszej części rozdziału. Prezentowane metody są typu UVCVKE, zatem mo na je wywołać bez potrzeby tworzenia obiektu 5VCVU. Średnia Średnia jest najczęściej wykorzystywaną funkcją w statystyce. Zapewnia obliczanie wartości średniej arytmetycznej podanego zbioru zmiennych losowych. W ten sposób znajduje się niejako „środek cię kości” zestawu danych. Aby obliczyć średnią aryt- metyczną danego zbioru liczb, nale y zsumować wszystkie jego elementy i otrzymaną sumę podzielić przez liczbę elementów. Na przykład sumą dla wartości 1 2 3 4 5 6 7 8 9 10 jest 55. Podzielenie tej wartości przez liczbę elementów w próbce (10), prowadzi do uzyskania wyniku 5.5. Wzór na średnią arytmetyczną jest następujący. W tym wzorze Di reprezentuje element danych, natomiast N jest liczbą elementów (zmiennych losowych) w próbce. Poni sza metoda o nazwie OGCP oblicza średnią dla wartości przekazanych w tablicy jako parametr. Metoda zwraca średnią arytmetyczną. YTCEC TGFPKæ RQFCP[EJ YCTVQ EK RWDNKE UVCVKE FQWDNG OGCP FQWDNG=? XCNU ] FQWDNG CXI HQT KPV K K XCNUNGPIVJ K CXI XCNU=K? CXI XCNUNGPIVJ TGVWTP CXI _ Aby u yć metody OGCP , wystarczy tylko przekazać referencję do tablicy zawierającej zbiór wartości. Jako wynik wykonania metody otrzymuje się wartość średniej arytme- tycznej elementów przekazanej tablicy.
  • 9. 216 Java. Sztuka programowania Mediana Mediana próbki jest określana jako wartość środkowa dla uporządkowanego rosnąco ciągu wartości. Na przykład dla zbioru 123456789 wartość mediany wynosi 5. W przypadku parzystej liczby elementów medianą jest średnia arytmetyczna dwóch środkowych wartości. Na przykład dla zbioru 1 2 3 4 5 6 7 8 9 10 wartość mediany wynosi 5.5. W przypadku próbek o rozkładzie normalnym wartości mediany i średniej są podobne. Im jednak rozkład próbki będzie bardziej odbiegał od rozkładu normalnego, tym ró nica między medianą a średnią będzie większa. Najprostszym sposobem otrzymania mediany z próbki jest posortowanie danych a następ- nie pobranie środkowej wartości. Oto sposób działania metody OGFKCP . YTCEC OGFKCPú RQFCP[EJ YCTVQ EK RWDNKE UVCVKE FQWDNG OGFKCP FQWDNG=? XCNU ] FQWDNG VGOR=? PGY FQWDNG=XCNUNGPIVJ? 5[UVGOCTTC[EQR[ XCNU VGOR XCNUNGPIVJ #TTC[UUQTV VGOR UQTVQYCPKG FCP[EJ YTÎEGPKG YCTVQ EK TQFMQYGL KH XCNUNGPIVJ ] ,G NK PKGRCT[UVC NKEDC YCTVQ EK PCLF TGFPKæ TGVWTP VGOR=VGORNGPIVJ? VGOR= VGORNGPIVJ? _ GNUG TGVWTP VGOR=VGORNGPIVJ? _ Aby u yć metody OGFKCP , wystarczy tylko przekazać referencję do tablicy zawie- rającej zbiór wartości. Jako wynik wykonania metody otrzymuje się wartość mediany. Warto zauwa yć, i prezentowana metoda wykonuje kopię przekazanej tablicy za pomocą polecenia 5[UVGOCTTC[EQR[ . Sortowaniu podlega właśnie kopia. W ten sposób przekazana tablica nie ulega modyfikacji. Zachowanie oryginalnej kolejności jest bardzo wa ne, na przykład w przypadku tworzenia wykresu. Moda (dominanta) Moda próbki jest wartością najczęściej występującą w zbiorze. Na przykład dla próbki 123345677789 modą jest wartość 7, poniewa występuje najczęściej. Moda nie musi być unikalna. Na przykład w sytuacji 10 20 30 30 40 50 60 60 70
  • 10. Rozdział 8. ♦ Statystyka i wykresy 217 zarówno wartość 30, jak i 60 występuje po dwa razy. Ka da z tych wartości jest modą. Taki zbiór nazywany jest bimodalnym. Zbiór zawierający tylko jedną modą jest zbiorem unimodalnym. W prezentowanych przykładach zostanie zastosowane podejście, w któ- rym w przypadku wielu wartości mody zostanie zwrócona tylko pierwsza z nich. Je eli adna z wartości nie występuje częściej od innych, próbka nie posiada mody. Poni sza metoda OQFG znajduje modę zbioru.
  • 11. YTCEC OQFú FQOKPCPVú FNC RQFCP[EJ YCTVQ EK 9[LæVGM 0Q/QFG'ZEGRVKQP LGUV I CUCP[ YVGF[ IF[ CFPC NKED PKG Y[UVúRWLG Eú EKGL QF RQQUVC [EJ )F[ FYKG NWD YKúEGL YCTVQ EK RQLCYKC UKú TÎYPKG EúUVQ YTCECPC LGUV V[NMQ RKGTYUC PKEJ
  • 12. RWDNKE UVCVKE FQWDNG OQFG FQWDNG=? XCNU VJTQYU 0Q/QFG'ZEGRVKQP ] FQWDNG O OQFG8CN KPV EQWPV QNFEQWPV HQT KPV K K XCNUNGPIVJ K ] O XCNU=K? EQWPV NKECPKG Y[UVúRQYCPKC RQUEGIÎNP[EJ YCTVQ EK HQT KPV LK L XCNUNGPIVJ L KH O XCNU=L? EQWPV
  • 13. ,G NK VC YCTVQ è Y[UVúRWLG Eú EKGL PK RQRTGFPKG CRCOKúVCL Læ
  • 14. KH EQWPV QNFEQWPV ] OQFG8CN O QNFEQWPV EQWPV _ _ KH QNFEQWPV VJTQY PGY 0Q/QFG'ZEGRVKQP GNUG TGVWTP OQFG8CN _ Metoda OQFG zlicza najpierw liczbę wystąpień poszczególnych wartości w tablicy XCNU. Je eli znajdzie wartość występującą więcej razy ni poprzednia, zapamiętuje nową wartość w OQFG8CN. Po zakończeniu procesu najczęściej występująca wartość znajduje się w zmiennej OQFG8CN i jest ona zwracana. W przypadku wstępowania wielu wartości mody, metoda zwraca tylko pierwszą. Je eli próbka nie zawiera dominanty, następuje zgłoszenie wyjątku 0Q/QFG'ZEGRVKQP. Oto postać klasy 0Q/QFG'ZEGRVKQP. 9[LæVGM I CUCP[ RTG /QFG ENCUU 0Q/QFG'ZEGRVKQP GZVGPFU 'ZEGRVKQP ] RWDNKE 5VTKPI VQ5VTKPI ] TGVWTP DKÎT PKG CYKGTC OQF[ _ _
  • 15. 218 Java. Sztuka programowania Wariancje i odchylenie standardowe Choć podsumowanie zbioru zmiennych losowych jedną wartością, taką jak średnia lub mediana wydaje się być bardzo przekonujące, takie podejście nie zapewnia mo liwości wykonania wyczerpującej analizy danych. Czasem nawet takie rozwiązanie mo e być mylące. Je eli próbka zawiera na przykład wartości skrajne, wtedy średnia i mediana nie reprezentuje jej w wystarczający sposób. Oto przykład 10 11 9 1 0 2 3 12 11 10 Średnia wynosi 6,9, ale wartość ta raczej jest niedostateczną reprezentacją próbki, po- niewa adna ze zmiennych losowych nie jest nawet w przybli eniu równa średniej. Problem polega na tym, i średnia nie przekazuje informacji na temat wariacji lub roz- kładu danych. Dobrze jest znać odstępy pomiędzy wartościami poszczególnych zmien- nych losowych. W ten sposób lepiej mo na zinterpretować średnią, medianę i modę. Aby znaleźć stopień zmienności próbki, trzeba obliczyć odchylenie standardowe. Od- chylenie standardowe uzyskiwane jest po obliczeniu wariancji. Obie wartości określają rozkład danych w zbiorze. Z tych dwóch współczynników odchylenie standardowe jest wa niejsze, gdy wyznacza średnią odległość pomiędzy wartościami zmiennych losowych a średnią. Wariancję oblicza się z następującego wzoru. W powy szym wzorze N jest liczbą elementów, M jest średnią a Di — to wartości poszczególnych zmiennych losowych w próbie. Konieczne jest podnoszenie wyniku do kwadratu, aby uzyskiwać tylko wartości dodatnie. Je eli wzór nie uwzględniałby podnoszenia do kwadratu, wynik często wynosiłby zero. Odchylenie standardowe znajduje się obliczając pierwiastek kwadratowy wariancji. Z tego powodu wzór na odchylenie standardowe ma następującą postać. Jak ju wspomniano wcześniej, odchylenie standardowe jest bardziej przydatne od wariancji. Warto rozwa yć następujący zbiór: 11 20 40 30 99 30 50 Wariancję określa się jako średnią arytmetyczną kwadratów odchyleń poszczególnych wartości zmiennych od ich wartości średniej (zobacz tabelę na następnej stronie). Z powy szej tabeli wynika, i średnia kwadratów ró nic wartości zmiennych losowych od ich wartości średniej wynosi 717,43. Aby znaleźć teraz odchylenie standardowe, wystarczy znaleźć pierwiastek kwadratowy wariancji. Wynosi on około 26,78. Od- chylenie standardowe określa średnią odległość poszczególnych punktów od średniej wartości wszystkich elementów.
  • 16. Rozdział 8. ♦ Statystyka i wykresy 219 Di Di–M (Di–M)2 11 –29 841 20 –20 400 40 0 0 30 –10 100 99 59 3481 30 –10 100 50 10 100 Suma: 5022 Średnia sumy: 717.43 Odchylenie standardowe informuje o tym, czy wartość średniej dla elementów dobrze reprezentuje zbiór. Jeśli na przykład kupiono fabrykę batoników a kierownik informuje o tym, i w poprzednim miesiącu wyprodukowano średnio 2 500 batoników dziennie ale odchylenie standardowe wyniosło 2 000, nale y się zastanowić nad poprawą linii produkcyjnej. Oto bardzo wa na zasada. Przy zało eniu, i dane stosują się do rozkładu normalnego, około 68% zmiennych losowych znajdzie się w pojedynczym odchyleniu standardowym od średniej a koło 95% znajdzie się w podwójnym odchyleniu standardowym. Przedstawiona poni ej metoda UVFGX oblicza odchylenie standardowe dla tablicy wartości. YTCEC QFEJ[NGPKG UVCPFCTFQYG DKQTW YCTVQ EK RWDNKE UVCVKE FQWDNG UVFGX FQWDNG=? XCNU ] FQWDNG UVF FQWDNG CXI OGCP XCNU HQT KPV K K XCNUNGPIVJ K UVF XCNU=K?CXI
  • 17. XCNU=K?CXI UVF XCNUNGPIVJ UVF /CVJUSTV UVF TGVWTP UVF _ Równanie regresji Jednym z najczęstszych zastosowań statystyki jest prognozowanie przyszłości. Choć dane pochodzące z przeszłości nie zawsze pozwalają na przewidywanie przyszłości, często korzysta się z tak zwanej analizy trendu. Prawdopodobnie najbardziej rozpo- wszechnionym narzędziem do tego rodzaju analizy jest równanie regresji. Równanie to opisuje związek dwóch wartości, które wchodzą w skład dwuwymiarowej zmiennej losowej. Często linię tę nazywa się linią najmniejszych kwadratów.
  • 18. 220 Java. Sztuka programowania Przed zaprezentowaniem odpowiedniego wzoru warto przypomnieć, i linia prosta w dwóch wymiarach jest opisywana następującym równaniem Y = a + bX W tym przypadku X jest zmienną niezale ną, Y jest zmienną zale ną, a opisuje wartość przesunięcia na osi Y a b — stopień nachylenia linii. Aby w pełni określić poło enie linii w układzie współrzędnych, trzeba odnaleźć wartości współczynników a i b. Aby znaleźć równanie regresji, mo na skorzystać z metody najmniejszych kwadratów. Ogólnie pomysł polega na tym, by odnaleźć linię, która zminimalizuje sumę kwadratów odchyleń między poszczególnymi danymi a linią. Znalezienie tego równania wymaga dwóch kroków. Najpierw oblicza się wartość b, u ywając wzoru: W powy szym wzorze Mx jest wartością średnią współrzędnej X, My — średnią współ- rzędnej Y. Po obliczeniu b wartość a oblicza się z następującego wzoru. a = My – bMx Po określeniu równania regresji liniowej mo na u yć dowolnej wartości X i wskazać dla niej przewidywaną wartość Y. Aby zrozumieć znaczenie linii regresji, mo na rozwa yć następujący przykład. Załó my, e mamy dostęp do średnich wartości akcji firmy XYZ w przeciągu ostatnich 10 lat. Oto zebrane dane: Rok Cena 0 68 1 75 2 74 3 80 4 81 5 85 6 82 7 87 8 91 9 94 Równanie regresji dla tych danych jest następujące. Y = 70,22 + 2,55 X
  • 19. Rozdział 8. ♦ Statystyka i wykresy 221 Dane i linię regresji przedstawiono na rysunku 8.1. Jak wynika z rysunku, linia regre- sji jest nachylona do góry. Oznacza to tendencję wzrostową akcji firmy XYZ. Warto tak e zauwa yć, i punkty reprezentujące zmienne losowe (dane) są poło one bardzo blisko linii regresji. Analizując przebieg linii mo na przewidzieć, i w roku 11 cena akcji wzrośnie do 98,27. Aby uzyskać tę wartość, wystarczy w równaniu regresji za- miast X wstawić wartość 11. Oczywiście rozwiązanie to ma jedną wadę — to tylko przewidywanie. Nie ma gwarancji, i rzeczywiście cena akcji za dwa lata będzie do- kładnie taka. Rysunek 8.1. Wykres średnich cen i linia regresji Współczynnik korelacji Choć linia regresji z rysunku 8.1 wydaje się wskazywać tendencję wzrostową, nie wia- domo, z jakim stopniem dokładności odwzorowuje ona zebrane dane. Je eli dane i linia regresji są ze sobą słabo powiązane, wykres regresji liniowej nie jest dobrym wskaź- nikiem. Je eli jednak punkty reprezentujące dane le ą dokładnie na linii wykresu, ma on du ą wartość. Aby określić znaczenie otrzymanej linii regresji, najczęściej oblicza się współczynnik korelacji, który mo e przyjmować wartości od –1 do 1. Współczynnik ten opisuje siłę liniowego związku między dwiema zmiennymi. Brzmi to być mo e dziwnie, ale jest to bardzo proste zagadnienie. Graficznie współczynnik korelacji jest związany z odle- głością poszczególnych punktów reprezentujących dane (zmienne losowe) od linii, stanowiącej wykres regresji. Je eli współczynnik wynosi 1, dane są doskonale dopa- sowane do linii (doskonała korelacja dodatnia). Wartość 0 oznacza brak związku między linią a danymi (w takim przypadku ka da dowolna linia prosta byłaby równie dobra jak rozwa ana). Znak korelacji jest taki sam jak współczynnik nachylenia linii (wartość b). Je eli współczynnik ten jest dodatni, oznacza to bezpośredni związek zmiennej zale nej od zmiennej niezale nej. Dla ujemnego współczynnika występuje związek odwrotny. Wzór słu ący do obliczania współczynnika korelacji jest następujący.
  • 20. 222 Java. Sztuka programowania We wzorze Mx oznacza średnią współrzędnej X, My — średnią współrzędnej Y. Znak współczynnika zale y od nachylenia linii regresji. Ogólnie wartość wynosząca 0,81 lub więcej jest traktowana jako silny związek. Oznacza to, i około 66% danych jest dopasowanych do linii regresji. Aby zamienić współczynnik na wartość procentową, wystarczy podnieść go do kwadratu i pomno yć przez 100. Uzyskana w ten sposób wartość jest nazywana współczynnikiem determinacji. Metoda TGITGUU przedstawiona poni ej oblicza równanie regresji oraz współczyn- nik korelacji.
  • 21. 1DNKECPKG TGITGULK K YURÎ E[PPKM MQTGNCELK FNC RQFCPGIQ DKQTW YCTVQ EK 9CTVQ EK TGRTGGPVWLæ YURÎ TúFPæ ; 9URÎ TúFPæ : LGUV ECU KPMTGOGPVCELC Q LGFGP Y MC F[O MTQMW
  • 22. RWDNKE UVCVKE 4GICVC TGITGUU FQWDNG=? XCNU ] FQWDNG C D [#XI Z#XI VGOR VGOR EQT FQWDNG XCNU=? PGY FQWDNG=XCNUNGPIVJ? 7VYQTGPKG HQTOCVW NKEDQYGIQ FYQOC E[HTCOK RQ RTGEKPMW 0WODGT(QTOCV PH 0WODGT(QTOCVIGV+PUVCPEG PHUGV/CZKOWO(TCEVKQPKIKVU PCNGKGPKG TGFPKGL YCTVQ EK ; [#XI OGCP XCNU PCNGKGPKG TGFPKGL MQORQPGPVW : Z#XI HQT KPV K K XCNUNGPIVJ K Z#XI K Z#XI XCNUNGPIVJ PCNGKGPKG D VGOR VGOR HQT KPV K K XCNUNGPIVJ K ] VGOR XCNU=K?[#XI
  • 23. KZ#XI VGOR KZ#XI
  • 24. KZ#XI _ D VGORVGOR PCNGKGPKG C C [#XI D
  • 25. Z#XI 1DNKEGPKG YURÎ E[PPKMÎY MQTGNCELK HQT KPV K K XCNUNGPIVJ K XCNU=K? K EQT VGORXCNUNGPIVJ EQT UVFGX XCNU
  • 26. UVFGX XCNU TGVWTP PGY 4GICVC C D EQT ; PHHQTOCV C PHHQTOCV D
  • 27. : _ Nale y podkreślić, i metoda opiera się na zało eniu, e zmienną niezale ną (X) jest czas. Z tego powodu w ka dym kroku zwiększa wartość tej zmiennej o 1. Średnia wartości X jest obliczana następującymi poleceniami.
  • 28. Rozdział 8. ♦ Statystyka i wykresy 223 PCNGKGPKG TGFPKGL MQORQPGPVW : Z#XI HQT KPV K K XCNUNGPIVJ K Z#XI K Z#XI XCNUNGPIVJ Wartości od 0 do liczby elementów są ze sobą sumowane a następnie wynik tej operacji jest dzielony przez liczbę elementów. W ten sposób powstaje średnia X. Oś X oznacza czas, zatem często taką analizę nazywa się analizą czasową. Wartością odniesienia podczas próbkowania jest czas, zatem do metody przekazuje się tylko jedną tablicę. Mo liwe jest stosowanie dwóch tablic: jednej dla wartości X i jednej dla warto- ści Y, ale taki sposób działania nie jest rozpatrywany w niniejszym rozdziale. Metoda TGITGUU zwraca wartości a i b, tekstową reprezentację równania regresji i współczynnik korelacji, wszystkie dane zostają umieszczone w obiekcie 4GICVC. Klasę tego obiektu przedstawiono poni ej. 6C MNCUC RTGEJQYWLG FCPG CPCNK[ TGITGU[LPGL ENCUU 4GICVC ] RWDNKE FQWDNG C D RWDNKE FQWDNG EQT RWDNKE 5VTKPI GSWCVKQP RWDNKE 4GICVC FQWDNG K FQWDNG L FQWDNG M 5VTKPI UVT ] C K D L EQT M GSWCVKQP UVT _ _ Cała klasa Stats Wszystkie metody statystyczne znajdują się w jednej klasie 5VCVU, której kod przed- stawiono poni ej. W tym samym pliku źródłowym umieszczono tak e klasy 4GICVC i 0Q/QFG'ZEGRVKQP. KORQTV LCXCWVKN
  • 30. 6C MNCUC RTGEJQYWLG FCPG CPCNK[ TGITGU[LPGL ENCUU 4GICVC ] RWDNKE FQWDNG C D RWDNKE FQWDNG EQT RWDNKE 5VTKPI GSWCVKQP RWDNKE 4GICVC FQWDNG K FQWDNG L FQWDNG M 5VTKPI UVT ] C K D L EQT M GSWCVKQP UVT _ _
  • 31. 224 Java. Sztuka programowania 9[LæVGM I CUCP[ RTG /QFG ENCUU 0Q/QFG'ZEGRVKQP GZVGPFU 'ZEGRVKQP ] RWDNKE 5VTKPI VQ5VTKPI ] TGVWTP DKÎT PKG CYKGTC OQF[ _ _ 1IÎNPC MNCUC UVCV[UV[M RWDNKE ENCUU 5VCVU ] YTCEC TGFPKæ RQFCP[EJ YCTVQ EK RWDNKE UVCVKE FQWDNG OGCP FQWDNG=? XCNU ] FQWDNG CXI HQT KPV K K XCNUNGPIVJ K CXI XCNU=K? CXI XCNUNGPIVJ TGVWTP CXI _ YTCEC OGFKCPú RQFCP[EJ YCTVQ EK RWDNKE UVCVKE FQWDNG OGFKCP FQWDNG=? XCNU ] FQWDNG VGOR=? PGY FQWDNG=XCNUNGPIVJ? 5[UVGOCTTC[EQR[ XCNU VGOR XCNUNGPIVJ #TTC[UUQTV VGOR UQTVQYCPKG FCP[EJ YTÎEGPKG YCTVQ EK TQFMQYGL KH XCNUNGPIVJ ] ,G NK PKGRCT[UVC NKEDC YCTVQ EK PCLF TGFPKæ TGVWTP VGOR=VGORNGPIVJ? VGOR= VGORNGPIVJ? _ GNUG TGVWTP VGOR=VGORNGPIVJ? _
  • 32. YTCEC OQFú FQOKPCPVú FNC RQFCP[EJ YCTVQ EK 9[LæVGM 0Q/QFG'ZEGRVKQP LGUV I CUCP[ YVGF[ IF[ CFPC NKED PKG Y[UVúRWLG Eú EKGL QF RQQUVC [EJ )F[ FYKG NWD YKúEGL YCTVQ EK RQLCYKC UKú TÎYPKG EúUVQ YTCECPC LGUV V[NMQ RKGTYUC PKEJ
  • 33. RWDNKE UVCVKE FQWDNG OQFG FQWDNG=? XCNU VJTQYU 0Q/QFG'ZEGRVKQP ] FQWDNG O OQFG8CN KPV EQWPV QNFEQWPV HQT KPV K K XCNUNGPIVJ K ] O XCNU=K? EQWPV NKECPKG Y[UVúRQYC RQUEGIÎNP[EJ YCTVQ EK HQT KPV LK L XCNUNGPIVJ L KH O XCNU=L? EQWPV
  • 34. Rozdział 8. ♦ Statystyka i wykresy 225
  • 35. ,G NK VC YCTVQ è Y[UVúRWLG Eú EKGL PK RQRTGFPKG CRCOKúVCL Læ
  • 36. KH EQWPV QNFEQWPV ] OQFG8CN O QNFEQWPV EQWPV _ _ KH QNFEQWPV VJTQY PGY 0Q/QFG'ZEGRVKQP GNUG TGVWTP OQFG8CN _ YTCEC QFEJ[NGPKG UVCPFCTFQYG DKQTW YCTVQ EK RWDNKE UVCVKE FQWDNG UVFGX FQWDNG=? XCNU ] FQWDNG UVF FQWDNG CXI OGCP XCNU HQT KPV K K XCNUNGPIVJ K UVF XCNU=K?CXI
  • 37. XCNU=K?CXI UVF XCNUNGPIVJ UVF /CVJUSTV UVF TGVWTP UVF _
  • 38. 1DNKECPKG TGITGULK K YURÎ E[PPKMC MQTGNCELK FNC RQFCPGIQ DKQTW YCTVQ EK 9CTVQ EK TGRTGGPVWLæ YURÎ TúFPæ ; 9URÎ TúFPæ : LGUV ECU KPMTGOGPVCELC Q LGFGP Y MC F[O MTQMW
  • 39. RWDNKE UVCVKE 4GICVC TGITGUU FQWDNG=? XCNU ] FQWDNG C D [#XI Z#XI VGOR VGOR EQT FQWDNG XCNU=? PGY FQWDNG=XCNUNGPIVJ? 7VYQTGPKG HQTOCVW NKEDQYGIQ FYQOC E[HTCOK RQ RTGEKPMW 0WODGT(QTOCV PH 0WODGT(QTOCVIGV+PUVCPEG PHUGV/CZKOWO(TCEVKQPKIKVU PCNGKGPKG TGFPKGL YCTVQ EK ; [#XI OGCP XCNU PCNGKGPKG TGFPKGL MQORQPGPVW : Z#XI HQT KPV K K XCNUNGPIVJ K Z#XI K Z#XI XCNUNGPIVJ PCNGKGPKG D VGOR VGOR HQT KPV K K XCNUNGPIVJ K ] VGOR XCNU=K?[#XI
  • 40. KZ#XI VGOR KZ#XI
  • 41. KZ#XI _ D VGORVGOR
  • 42. 226 Java. Sztuka programowania PCNGKGPKG C C [#XI D
  • 43. Z#XI 1DNKEGPKG YURÎ E[PPKMÎY MQTGNCELK HQT KPV K K XCNUNGPIVJ K XCNU=K? K EQT VGORXCNUNGPIVJ EQT UVFGX XCNU
  • 44. UVFGX XCNU TGVWTP PGY 4GICVC C D EQT ; PHHQTOCV C PHHQTOCV D
  • 45. : _ _ Tworzenie wykresów Choć statystyka jest u yteczna sama w sobie, nie zawsze daje pełny obraz sytuacji. W wielu przypadkach po ądane jest przedstawienie danych w postaci graficznej. Pokazanie danych na wykresie pozwala od razu zauwa yć związki i anomalie, które nie zawsze są oczywiste po przeanalizowaniu statystyk. Poza tym wykres dokładnie obrazuje rozkład i zmienność danych. Z powodu du ego znaczenia wykresów w staty- styce, w tym podrozdziale zostanie zaprezentowany kod rysujący trzy rodzaje wykresów. Poza samym wyświetlaniem wykresów, przedstawiony w tym podrozdziale kod obra- zuje tak e zasady korzystania z systemu AWT i obsługi zdarzeń. AWT stanowi część podstawowej biblioteki klas Javy. Zapewnia okienkowe, graficzne środowisko inter- fejsu u ytkownika. Aplikacje z takim interfejsem komunikują się z u ytkownikiem za pomocą zdarzeń. Zdarzeniem mo e być naciśnięcie przycisku na klawiaturze, wybra- nie polecenia z menu a tak e zmiana rozmiaru okna. W trakcie omawiania ró nych metod rysowania wska emy tak e kilka aspektów związanych ze środowiskiem inter- fejsu graficznego. Na przykład trzeba umo liwić dynamiczne skalowanie wykresu, poniewa u ytkownik mo e dowolnie zmienić rozmiar okna. W tym rozdziale zostanie zaprezentowane wykonanie trzech rodzajów wykresów. Pierw- szym z nich jest wykres słupkowy, drugi to wykres punktowy a trzeci — to wykres punktowy z linią regresji. Jak będzie się mo na przekonać, większość kodu, na przy- kład ten zapewniający skalowanie, jest taka sama dla wszystkich wykresów. Skalowanie danych Aby metoda rysowania mogła obsługiwać dowolne jednostki wielkości, potrzebne jest odpowiednie skalowanie danych. Skalowanie musi być powiązane z aktualnym roz- miarem okna. Co więcej, skalowanie musi się odbywać dynamicznie. Ka da zmiana rozmiaru okna powinna powodować dostosowanie skali. Proces skalowania wymaga znalezienia stosunku między zakresem danych a fizycznymi wymiarami okna. Gdy odnajdzie się ten współczynnik, dane mo na rysować, mno ąc
  • 46. Rozdział 8. ♦ Statystyka i wykresy 227 przez niego poszczególne wartości. W ten sposób uzyskuje się wartości współrzędnych wewnątrz okna. Oto przykład wzoru na skalowanie dla osi Y. Y' = Y * (szerokość_okna / (max – min)) gdzie Y' jest skalowaną wartością, opisująca poło enie wewnątrz okna. Choć przedstawiony wzór jest bardzo prosty, pojawiają się komplikacje związane ze środowiskiem graficznym. Na przykład szerokość okna trzeba pobierać za ka dym razem, gdy następuje ponowne rysowanie wykresu, gdy szerokość ta mogła ulec zmianie. Co więcej, od łącznej szerokości okna trzeba odjąć szerokość obramowania okna. Trzeba tak e uwzględnić opis wykresu. W ten sposób skalowanie wymaga wyko- nania kilku kroków, ale nie są one szczególnie zło one. Klasa Graphs Metody rysowania wykresów znajdują się w klasie )TCRJU. Klasa ta rozszerza klasę (TCOG. Z tego powodu wykresy znajdują się wewnątrz głównych okien. Czyni to wykresy niezale nymi i łatwo skalowalnymi. Mo na na przykład wyświetlić wykres a następ- nie go zminimalizować bez chowania całej aplikacji. Poni ej znajduje się pełny kod klasy )TCRJU. Klasę tę dokładniej opisano w dalszej części rozdziału. KORQTV LCXCCYV
  • 47. KORQTV LCXCCYVGXGPV
  • 48. KORQTV LCXCCRRNGV
  • 49. KORQTV LCXCWVKN
  • 50. 1IÎNPC MNCUC T[UQYCPKC Y[MTGUÎY RWDNKE ENCUU )TCRJU GZVGPFU (TCOG ] 5VC G TQFCLÎY Y[MTGUÎY RWDNKE HKPCN UVCVKE KPV $#4 RWDNKE HKPCN UVCVKE KPV 5%#66'4 RWDNKE HKPCN UVCVKE KPV 4')2.16 RTKXCVG KPV ITCRJ5V[NG
  • 51. 1MTG NC KNQ è OKGLUEC FQ RQQUVCYKGPKC OKúF[ QDUCTGO FCP[EJ C MTCYúFKæ
  • 52. RTKXCVG HKPCN KPV NGHV)CR RTKXCVG HKPCN KPV VQR)CR RTKXCVG HKPCN KPV DQVVQO)CR RTKXCVG KPV TKIJV)CR QDNKECPKG VGL YCTVQ EK 2TGEJQYWLG YCTVQ è OKPKOCNPæ K OCMU[OCNPæ FCP[EJ RTKXCVG FQWDNG OKP OCZ 1FPKGUKGPKG UKú FQ FCP[EJ RTKXCVG FQWDNG=? FCVC -QNQT[ Y[MTGUW %QNQT ITKF%QNQT PGY %QNQT %QNQT FCVC%QNQT PGY %QNQT
  • 53. 228 Java. Sztuka programowania 4Î PG YCTVQ EK W [YCPG FQ UMCNQYCPKC K Y[ YKGVNCPKC FCP[EJ RTKXCVG KPV J)CR QFUVúR OKúF[ RWPMVCOK FCP[EJ RTKXCVG KPV URTGCF QFUVúR OKúF[ YCTVQ EKCOK OKP K OCZ RTKXCVG FQWDNG UECNG YURÎ E[PPKM UMCNQYCPKC RTKXCVG KPV DCUGNKPG RKQPQY[ YURÎ E[PPKM RQFUVCY[ .QMCNKCELC QDUCTW FCP[EJ Y QMPKG RTKXCVG KPV VQR DQVVQO NGHV TKIJV RWDNKE )TCRJU FQWDNG=? XCNU KPV UV[NG ] 1DU WIC FCTG COMPKúEKC QMPC CFF9KPFQY.KUVGPGT PGY 9KPFQY#FCRVGT ] RWDNKE XQKF YKPFQY%NQUKPI 9KPFQY'XGPV YG ] UGV8KUKDNG HCNUG FKURQUG _ _ 1DU WIC OKCP[ TQOKCTW CFF%QORQPGPV.KUVGPGT PGY %QORQPGPV#FCRVGT ] RWDNKE XQKF EQORQPGPV4GUKGF %QORQPGPV'XGPV EG ] TGRCKPV _ _ ITCRJ5V[NG UV[NG FCVC XCNU 5QTVQYCPKG FCP[EJ Y EGNW PCNGKGPKC YCTVQ EK OKP K OCZ FQWDNG V=? PGY FQWDNG=XCNUNGPIVJ? 5[UVGOCTTC[EQR[ XCNU V XCNUNGPIVJ #TTC[UUQTV V OKP V=? OCZ V=VNGPIVJ? UGV5KG PGY KOGPUKQP UYKVEJ ITCRJ5V[NG ] ECUG $#4 UGV6KVNG 9[MTGU U WRMQY[ UGV.QECVKQP DTGCM ECUG 5%#66'4 UGV6KVNG 9[MTGU RWPMVQY[ UGV.QECVKQP DTGCM ECUG 4')2.16 UGV6KVNG 9[MTGU TGITGULK UGV.QECVKQP DTGCM _ UGV8KUKDNG VTWG _
  • 54. Rozdział 8. ♦ Statystyka i wykresy 229 RWDNKE XQKF RCKPV )TCRJKEU I ] KOGPUKQP YKP5KG IGV5KG TQOKCT QMPC +PUGVU KPU IGV+PUGVU TQOKCT ITCPKE 4QOKCT CMVWCNPKG UVQUQYCPGL EEKQPMK (QPV/GVTKEU HO IIGV(QPV/GVTKEU 1DNKEGPKG QFRQYKGFPKGIQ QFUVúRW TKIJV)CR HOUVTKPI9KFVJ FCVCNGPIVJ 1DNKEGPKG YU[UVMKEJ RTGTY FNC FCPGIQ TGIKQPW NGHV KPUNGHV NGHV)CR HOEJCT9KFVJ VQR KPUVQR VQR)CR HOIGV#UEGPV DQVVQO KPUDQVVQO DQVVQO)CR HOIGV#UEGPV TKIJV KPUTKIJV TKIJV)CR
  • 55. ,G NK YCTVQ è OKPKOCNPC LGUV FQFCVPKC W [L LCMQ OKGLUEC RQEæVMQYGIQ LG NK YCTVQ è OCMU[OCNPC LGUV WLGOPC W [L
  • 56. KH OKP OKP KH OCZ OCZ
  • 57. 1DNKE QFNGI Q è OKúF[ OKPKOWO K OCMUKOWO
  • 58. URTGCF KPV OCZ OKP 1DNKE YURÎ E[PPKM UMCNQYCPKC UECNG FQWDNG YKP5KGJGKIJV DQVVQO VQR URTGCF 2QPCL RQ Q GPKG RQFUVCY[ DCUGNKPG KPV YKP5KGJGKIJV DQVVQO OKP
  • 59. UECNG 1DNKE QFNGI Q è OKúF[ FCP[OK J)CR YKP5KGYKFVJ NGHV TKIJV FCVCNGPIVJ 7UVCY MQNQT UKCVMK IUGV%QNQT ITKF%QNQT 0CT[UWL YURÎ TúFPG IFTCY.KPG NGHV DCUGNKPG NGHV FCVCNGPIVJ
  • 60. J)CR DCUGNKPG 0CT[UWL Q ; KH ITCRJ5V[NG $#4 IFTCY.KPG NGHV YKP5KGJGKIJVDQVVQO NGHV VQR 9[ YKGVN YCTVQ EK OKP OCZ K IFTCY5VTKPI KPUNGHV DCUGNKPG HOIGV#UEGPV KH OCZ IFTCY5VTKPI OCZ KPUNGHV DCUGNKPG KPV OCZ
  • 61. UECNG KH OKP IFTCY5VTKPI OKP KPUNGHV DCUGNKPG KPV OKP
  • 63. 230 Java. Sztuka programowania 9[ YKGVN YCTVQ EK IFTCY5VTKPI FCVCNGPIVJ FCVCNGPIVJ
  • 64. J)CR NGHV DCUGNKPG HOIGV#UEGPV 7UVCY MQNQT FCP[EJ IUGV%QNQT FCVC%QNQT 9[ YKGVN FCPG UYKVEJ ITCRJ5V[NG ] ECUG $#4 DCTITCRJ I DTGCM ECUG 5%#66'4 UECVVGT I DTGCM ECUG 4')2.16 TGIRNQV I DTGCM _ _ 9[ YKGVNCPKG Y[MTGUW U WRMQYGIQ RTKXCVG XQKF DCTITCRJ )TCRJKEU I ] KPV X HQT KPV K K FCVCNGPIVJ K ] X KPV FCVC=K?
  • 65. UECNG IFTCY.KPG K
  • 67. J)CR NGHV DCUGNKPG X _ _ 9[ YKGVNCPKG Y[MTGUW RWPMVQYGIQ RTKXCVG XQKF UECVVGT )TCRJKEU I ] KPV X HQT KPV K K FCVCNGPIVJ K ] X KPV FCVC=K?
  • 68. UECNG IFTCY4GEV K
  • 69. J)CR NGHV DCUGNKPG X _ _ 9[MTGU RWPMVQY[ NKPKæ TGITGULK RTKXCVG XQKF TGIRNQV )TCRJKEU I ] KPV X 4GICVC TF 5VCVUTGITGUU FCVC HQT KPV K K FCVCNGPIVJ K ] X KPV FCVC=K?
  • 70. UECNG IFTCY4GEV K
  • 72. Rozdział 8. ♦ Statystyka i wykresy 231 4[UQYCPKG NKPKK TGITGULK IFTCY.KPG NGHV DCUGNKPG KPV TFC
  • 73. UECNG J)CR
  • 74. FCVCNGPIVJ NGHV DCUGNKPG KPV TFC TFD
  • 76. UECNG _ _ Zmienne klasy Graphs Klasa )TCRJU zaczyna się od zdefiniowania następujących zmiennych. 5VC G TQFCLÎY Y[MTGUÎY RWDNKE HKPCN UVCVKE KPV $#4 RWDNKE HKPCN UVCVKE KPV 5%#66'4 RWDNKE HKPCN UVCVKE KPV 4')2.16 RTKXCVG KPV ITCRJ5V[NG Pierwsze trzy zmienne typu HKPCN UVCVKE noszą nazwy $#4, 5%#66'4 i 4')2.16. War- tości te oznaczają ró ne typy wykresów. Typ wykresu jest przechowywany w zmiennej ITCRJ5V[NG. Następnie definiuje się zmienne przechowujące wielkość odstępu między granicą okna a początkiem obszaru wyświetlania danych na wykresie.
  • 77. 1MTG NC KNQ è OKGLUEC FQ RQQUVCYKGPKC OKúF[ QDUCTGO FCP[EJ C MTCYúFKæ
  • 78. RTKXCVG HKPCN KPV NGHV)CR RTKXCVG HKPCN KPV VQR)CR RTKXCVG HKPCN KPV DQVVQO)CR RTKXCVG KPV TKIJV)CR QDNKECPKG VGL YCTVQ EK Wszystkie zmienne poza TKIJV)CR są typu HKPCN. Zmienna TKIJV)CR jest obliczana póź- niej, gdy zale y ona od aktualnej szerokości znaków oraz liczby wyświetlanych danych. Następnie deklarowane są następujące zmienne. 2TGEJQYWLG YCTVQ è OKPKOCNPæ K OCMU[OCNPæ FCP[EJ RTKXCVG FQWDNG OKP OCZ 1FPKGUKGPKG UKú FQ FCP[EJ RTKXCVG FQWDNG=? FCVC Zmienne OKP i OCZ przechowują minimalną i maksymalną wartość danych. Tablica przechowująca dane jest dostępna przez referencję FCVC. Kolory u ywane przez wykres znajdują się w zmiennych ITKF%QNQT i FCVC%QNQT. -QNQT[ Y[MTGUW %QNQT ITKF%QNQT PGY %QNQT %QNQT FCVC%QNQT PGY %QNQT Linie siatki są jasnozielone, natomiast dane są zaznaczane na czarno. Oczywiście mo na zmienić te kolory na dowolne inne.
  • 79. 232 Java. Sztuka programowania Następnie deklaruje się ró ne zmienne związane ze skalowaniem. 4Î PG YCTVQ EK W [YCPG FQ UMCNQYCPKC K Y[ YKGVNCPKC FCP[EJ RTKXCVG KPV J)CR QFUVúR OKúF[ RWPMVCOK FCP[EJ RTKXCVG KPV URTGCF QFUVúR OKúF[ YCTVQ EKCOK OKP K OCZ RTKXCVG FQWDNG UECNG YURÎ E[PPKM UMCNQYCPKC RTKXCVG KPV DCUGNKPG RKQPQY[ YURÎ E[PPKM RQFUVCY[ Odległość między punktami danych na osi X zawiera zmienna J)CR. Liczbę jednostek między wartością minimalną a maksymalną przechowuje zmienna URTGCF. Współczyn- nik skali znajduje się w zmiennej UECNG. Pionowe poło enie linii bazy (czyli osi X) znajduje się w zmiennej DCUGNKPG. Na końcu zadeklarowano obszary VQR, DQVVQO, NGHV i TKIJV. .QMCNKCELC QDUCTW FCP[EJ Y QMPKG RTKXCVG KPV VQR DQVVQO NGHV TKIJV Zmienne te definiują obszar danych wewnątrz okna. Konstruktor klasy Graphs Konstruktor przyjmuje dwa argumenty. Pierwszy to referencja do danych, które mają zostać wyświetlone. Drugim jest rodzaj wykresu. Przekazaną wartością musi być )TCRJ$#4, )TCRJ5%#66'4 lub )TCRJ4')2.16. W konstruktorze najpierw nale y przypisać nasłuchiwanie zdarzenia zamykania okna. 1DU WIC FCTG COMPKúEKC QMPC CFF9KPFQY.KUVGPGT PGY 9KPFQY#FCRVGT ] RWDNKE XQKF YKPFQY%NQUKPI 9KPFQY'XGPV YG ] UGV8KUKDNG HCNUG FKURQUG _ _ Nasłuchiwanie dodaje się przez wywołanie metody CFF9KPFQY.KUVGPGT i przekaza- nie obiektu 9KPFQY#FCRVGT, w którym przysłonięto metodę YKPFQY%NQUKPI . Warto przypomnieć, i klasa adapterowa zawiera puste implementacje wszystkich metod wymaganych przez dany interfejs. W tym przypadku adapter 9KPFQY#FCRVGT imple- mentuje interfejs 9KPFQY.KUVGPGT. Adapter zapewnia puste implementacje wszystkich wymaganych metod, zatem trzeba tylko przysłonić odpowiednią metodę, w tym przy- padku YKPFQY%NQUKPI . W przypadku zamykania okna nale y je ukryć wywołując polecenie UGV8KUKDNG HCNUG. Następnie usuwa się okno z systemu poleceniem FKURQUG . Metody te są zdefinio- wane dla okien (TCOG z AWT. Następnie nale y dodać nasłuchiwanie zdarzeń zmiany rozmiaru okna. Wywołuje się metodę CFF%QORQPGPV.KUVGPGT i przekazuje obiekt %QORQPGPV#FCRVGT, który przy- słania metodę EQORQPGPV4GUKGF .
  • 80. Rozdział 8. ♦ Statystyka i wykresy 233 1DU WIC OKCP[ TQOKCTW CFF%QORQPGPV.KUVGPGT PGY %QORQPGPV#FCRVGT ] RWDNKE XQKF EQORQPGPV4GUKGF %QORQPGPV'XGPV EG ] TGRCKPV _ _ W przypadku zmiany rozmiaru okna metoda EQORQPGPV4GUKGF wywołuje metodę TGRCKPV , co natomiast powoduje wywołanie metody RCKPV . Jak za chwilę Czytelnik zobaczy, metoda RCKPV dynamicznie zmienia skalę na podstawie aktualnego rozmiaru okna. Po zmianie rozmiaru cały wykres jest rysowany od nowa z wykorzystaniem nowych wymiarów. Następnie do zmiennych ITCRJ5V[NG i FCVC nale y przypisać otrzymane dane i utwo- rzyć tymczasową kopię danych. Dane są sortowane w kopii tablicy. Z posortowanej tablicy danych pobiera się wartość minimalną i maksymalną. Kod wykonujący to zadanie przedstawiono poni ej. ITCRJ5V[NG UV[NG FCVC XCNU 5QTVQYCPKG FCP[EJ Y EGNW PCNGKGPKC YCTVQ EK OKP K OCZ FQWDNG V=? PGY FQWDNG=XCNUNGPIVJ? 5[UVGOCTTC[EQR[ XCNU V XCNUNGPIVJ #TTC[UUQTV V OKP V=? OCZ V=VNGPIVJ? Konstruktor klasy kończy się następującym kodem. UGV5KG PGY KOGPUKQP UYKVEJ ITCRJ5V[NG ] ECUG $#4 UGV6KVNG 9[MTGU U WRMQY[ UGV.QECVKQP DTGCM ECUG 5%#66'4 UGV6KVNG 9[MTGU RWPMVQY[ UGV.QECVKQP DTGCM ECUG 4')2.16 UGV6KVNG 9[MTGU TGITGULK UGV.QECVKQP DTGCM _ UGV8KUKDNG VTWG Najpierw ustala się początkowy rozmiar okna wykresu na 200 pikseli w poziomie i 120 w pionie, wywołując metodę UGV5KG . Potem na podstawie wartości zmiennej ITCRJ5V[NG przypisuje się odpowiedni tytuł, u ywając metody UGV6KVNG . Dodatkowo nale y ustalić tak e poło enie okna poleceniem UGV.QECVKQP . Na samym końcu włącza się wyświetlanie okna poleceniem UGV8KUKDNG VTWG. Powoduje to odrysowanie okna metodą RCKPV .
  • 81. 234 Java. Sztuka programowania Metoda paint() Większość zadań związanych z wyświetlaniem wykresu jest wykonywana przez metodę RCKPV . Wykonuje ona następujące działania. Odczytuje rozmiar okna oraz rozmiar granicy. Pobiera rozmiar aktualnie wybranej czcionki. Oblicza rozmiar obszaru danych wewnątrz okna. Jest to rozmiar okna minus granice i ewentualne odstępy. Oblicza współczynnik skali. Oblicza współrzędną Y podstawy wykresu, czyli oś X. Rysuje podstawę oraz oś Y. Wyświetla minimalne i maksymalne wartości X i Y. Wywołuje odpowiednią metodę rysowania w celu wykonania wykresu. Komentarze w metodzie RCKPV wyjaśniają kolejne działania, ale sama metoda jest bardzo prosta. Jest to jednak najwa niejsza metoda klas, zatem prześledzimy ją wiersz po wierszu. Metoda zaczyna się następującymi deklaracjami. KOGPUKQP YKP5KG IGV5KG TQOKCT QMPC +PUGVU KPU IGV+PUGVU TQOKCT ITCPKE Okno (TCOG składa się z dwóch głównych części: granicy, w której skład chodzi obra- mowanie, pasek tytułowy i menu (jeśli istnieje) oraz głównego obszaru wyświetlania danych. Rozmiar okna pobiera się poleceniem IGV5KG . Metoda ta zwraca ogólne wymiary okna w postaci obiektu KOGPUKQP. Referencja do zwróconego obiektu znajdzie się w zmiennej YKP5KG. Obiekt KOGPUKQP zawiera dwa pola: YKFVJ i JGKIJV. Z tego powodu ogólne wymiary okna odczytuje się jako YKP5KGYKFVJ i YKP5KGJGKIJV. Aby znaleźć obszar okna, w którym mo na wyświetlać dane, trzeba od ogólnego roz- miaru okna odjąć granice. Do tego celu słu y metoda IGV+PUGVU . Zwraca ona wymiary granic w postaci obiektu +PUGVU zawierającego pola NGHV, TKIJV, VQR i DQVVQO. Refe- rencja do tego obiektu jest przechowywana w KPU. Nale y pamiętać, i współrzędnymi lewego górnego naro nika okna są 0, 0. Z tego powodu lewy górny naro nik obszaru danych to KPUNGHV i KPUVQR, natomiast prawy dolny naro nik to YKP5KGYKFVJ KPU TKIJV i YKP5KGJGKIJV KPUDQVVQO. Następnie metoda RCKPV pobiera metrykę aktualnie wybranej czcionki. 4QOKCT CMVWCNPKG UVQUQYCPGL EEKQPMK (QPV/GVTKEU HO IIGV(QPV/GVTKEU Informacje znajdujące się w zmiennej HO posłu ą później do obliczenia wysokości i szerokości znaków u ywanych do wyświetlenia zakresu.
  • 82. Rozdział 8. ♦ Statystyka i wykresy 235 Choć granica określa maksymalny u yteczny obszar okna, nie zawsze jest to obszar najlepszy ze względów estetycznych. Najczęściej warto pozostawić niewielki odstęp miedzy danymi a granicą. Z tego powodu dostępny obszar dodatkowo redukujemy wartościami NGHV)CR, VQR)CR, DQVVQO)CR i TKIJV)CR. Trzy pierwsze zmienne zawierają wartość 2, ale ostatnią zmienną oblicza się na podstawie szerokości tekstu zawierają- cego liczbę elementów w zbiorze. 1DNKEGPKG QFRQYKGFPKGIQ QFUVúRW TKIJV)CR HOUVTKPI9KFVJ FCVCNGPIVJ Tekst wyświetlający liczbę elementów znajduje się po prawej stronie, zatem nale y przygotować dla niego odpowiednią ilość miejsca. Właśnie z tego powodu nale ało pobrać metrykę czcionki poleceniem IGV(QPV/GVTKEU . Stosując metodę UVTKPI9KFVJ uzyskanego obiektu mo na ustalić odpowiedni odstęp i przypisać go do TKIJV)CR. Teraz oblicza się łączne odstępy po ka dej stronie, u ywając wszystkich zebranych wartości. Wyniki zapisujemy w zmiennych NGHV, TKIJV, VQR i DQVVQO. 1DNKEGPKG YU[UVMKEJ RTGTY FNC FCPGIQ TGIKQPW NGHV KPUNGHV NGHV)CR HOEJCT9KFVJ VQR KPUVQR VQR)CR HOIGV#UEGPV DQVVQO KPUDQVVQO DQVVQO)CR HOIGV#UEGPV TKIJV KPUTKIJV TKIJV)CR Warto zauwa yć, i pozostawiono miejsce na wyświetlenie zakresu danych. Następnych kilka wierszy oblicza współczynnik skali.
  • 83. ,G NK YCTVQ è OKPKOCNPC LGUV FQFCVPKC W [L LCMQ OKGLUEC RQEæVMQYGIQ LG NK YCTVQ è OCMU[OCNPC LGUV WLGOPC W [L
  • 84. KH OKP OKP KH OCZ OCZ
  • 85. 1DNKE QFNGI Q è OKúF[ OKPKOWO K OCMUKOWO
  • 86. URTGCF KPV OCZ OKP 1DNKE YURÎ E[PPKM UMCNQYCPKC UECNG FQWDNG YKP5KGJGKIJV DQVVQO VQR URTGCF Proces zaczyna się od normalizacji wartości w OKP i OCZ. Wszystkie wykresy mają swój początek w punkcie 0, 0. Je eli więc wartość minimalna jest większa od 0, nale y ustawić OKP na 0. Je eli wartość maksymalna jest mniejsza od 0, nale y ustawić OCZ na 0. Następnie oblicza się odstęp między OKP i OCZ. Uzyskaną wartość u ywa się do obliczenia współczynnika skalowania przechowywanego w zmiennej UECNG. Po obliczeniu współczynnika skalowania poło enie linii bazy znajduje się skalując wartość OKP w sposób przedstawiony poni ej. 2QPCL RQ Q GPKG DC[ DCUGNKPG KPV YKP5KGJGKIJV DQVVQO OKP
  • 87. UECNG Je eli OKP wynosi zero, linia bazy znajdzie się na dole okna. W innym przypadku znaj- dzie się gdzieś w jego środkowej części. Je eli wszystkie wartości są ujemne, znajdzie się na górze.
  • 88. 236 Java. Sztuka programowania Odstęp między danymi jest określany za pomocą dzielenia szerokości obszaru danych przez liczbę elementów. 1DNKE QFNGI Q è OKúF[ FCP[OK J)CR YKP5KGYKFVJ NGHV TKIJV FCVCNGPIVJ W następnym kroku ustawia się aktualny kolor na ITKF%QNQT. Rysuje się osie i zakresy. Oto kod wykonujący to zadanie. 7UVCY MQNQT UKCVMK IUGV%QNQT ITKF%QNQT 0CT[UWL YURÎ TúFPG IFTCY.KPG NGHV DCUGNKPG NGHV FCVCNGPIVJ
  • 89. J)CR DCUGNKPG 0CT[UWL Q ; KH ITCRJ5V[NG $#4 IFTCY.KPG NGHV YKP5KGJGKIJVDQVVQO NGHV VQR 9[ YKGVN YCTVQ EK OKP OCZ K IFTCY5VTKPI KPUNGHV DCUGNKPG HOIGV#UEGPV KH OCZ IFTCY5VTKPI OCZ KPUNGHV DCUGNKPG KPV OCZ
  • 90. UECNG KH OKP IFTCY5VTKPI OKP KPUNGHV DCUGNKPG KPV OKP
  • 91. UECNG HOIGV#UEGPV 9[ YKGVN YCTVQ EK IFTCY5VTKPI FCVCNGPIVJ FCVCNGPIVJ
  • 92. J)CR NGHV DCUGNKPG HOIGV#UEGPV Wa nym jest, i dla wykresu słupkowego nie wyświetla się osi Y. Poza tym maksy- malny zakres wyświetla się tylko wtedy, je eli nie jest on zerowy. Podobnie ma się sprawa z zakresem minimum. Wysokość znaków określa ich poło enie w oknie. W kolejnym kroku nale y ustawić kolor na FCVC%QNQT i wywołać odpowiednią metodę rysowania wykresu. 7UVCY MQNQT FCP[EJ IUGV%QNQT FCVC%QNQT 9[ YKGVN FCPG UYKVEJ ITCRJ5V[NG ] ECUG $#4 DCTITCRJ I DTGCM ECUG 5%#66'4 UECVVGT I DTGCM ECUG 4')2.16 TGIRNQV I DTGCM _
  • 93. Rozdział 8. ♦ Statystyka i wykresy 237 Metoda bargraph() Metoda DCTITCRJ skaluje poszczególne elementy danych a następnie wyświetla linię, której długość jest proporcjonalna do tych danych. Linia jest rysowana od podstawy. Oto kod metody. 9[ YKGVNCPKG Y[MTGUW U WRMQYGIQ RTKXCVG XQKF DCTITCRJ )TCRJKEU I ] KPV X HQT KPV K K FCVCNGPIVJ K ] X KPV FCVC=K?
  • 94. UECNG IFTCY.KPG K
  • 96. J)CR NGHV DCUGNKPG X _ _ Skoro tak wiele zadań zostało ju wykonanych w metodzie RCKPV , metoda DCTITCRJ tylko skaluje poszczególne elementy za pomocą współczynnika skalowania a następnie rysuje linie. Linie zaczynają się od podstawy, czyli od osi X. Punkt końca oblicza się przez odejmowanie skalowanej wartości od DCUGNKPG. Nale y pamiętać, i współrzędne lewego górnego naro nika okna mają wartość 0, 0. Z tego powodu mniejsze wartości Y znajdują się wy ej w oknie ni większe wartości Y. Z powy szego wynika, e od DCUGNKPG nale y odjąć wartość X. Odstęp między słupkami wynosi J)CR. Poło enie X ka dego słupka jest obliczane przez pomno enie indeksu elementu przez wielkość odstępu i dodanie wartości przesunięcia względem lewej krawędzi (zmienna NGHV). Metoda scatter() Metoda UECVVGT działa bardzo podobnie jak metoda DCTITCRJ ale rysuje punkty zamiast linii. Oto kod metody. 9[ YKGVNCPKG Y[MTGUW RWPMVQYGIQ RTKXCVG XQKF UECVVGT )TCRJKEU I ] KPV X HQT KPV K K FCVCNGPIVJ K ] X KPV FCVC=K?
  • 97. UECNG IFTCY4GEV K
  • 98. J)CR NGHV DCUGNKPG X _ _ Metoda UECVVGT skaluje poszczególne elementy danych a następnie wyświetla punkt na osi Y, którego odległość od początku osi X jest proporcjonalna do tych danych. Metoda regplot() Podobnie jak metoda UECVVGT , metoda TGIRNQV rysuje punkty na wykresie. Ró nica polega na tym, i dodatkowo rysuje tak e linię regresji, u ywając funkcji TGITGUU .
  • 99. 238 Java. Sztuka programowania 9[MTGU RWPMVQY[ NKPKæ TGITGULK RTKXCVG XQKF TGIRNQV )TCRJKEU I ] KPV X 4GICVC TF 5VCVUTGITGUU FCVC HQT KPV K K FCVCNGPIVJ K ] X KPV FCVC=K?
  • 100. UECNG IFTCY4GEV K
  • 101. J)CR NGHV DCUGNKPG X _ 4[UQYCPKG NKPKK TGITGULK IFTCY.KPG NGHV DCUGNKPG KPV TFC
  • 102. UECNG J)CR
  • 103. FCVCNGPIVJ NGHV DCUGNKPG KPV TFC TFD
  • 105. UECNG _ Warto zwrócić uwagę na sposób rysowania linii regresji. W wywołaniu FTCY.KPG punkt końcowy linii regresji jest obliczany na podstawie wartości TFC i TFD, czyli miejsca przecięcia osi Y i linii regresji. Aplikacja tworzenia statystyk Dzięki klasom 5VCVU i )TCRJU mo na wykonać prostą, ale u yteczną aplikację. Główne okno aplikacji powstaje dzięki klasie 5VCVU9KP, której kod przedstawiono poni ej. KORQTV LCXCCYV
  • 106. KORQTV LCXCCYVGXGPV
  • 107. KORQTV LCXCWVKN
  • 108. KORQTV LCXCVGZV
  • 109. 2TGVYQTGPKG K Y[ YKGVNGPKG FCP[EJ UVCV[UV[EP[EJ RWDNKE ENCUU 5VCVU9KP GZVGPFU (TCOG KORNGOGPVU +VGO.KUVGPGT #EVKQP.KUVGPGT ] 0WODGT(QTOCV PH 0WODGT(QTOCVIGV+PUVCPEG 6GZV#TGC UVCVU6# %JGEMDQZ DCT PGY %JGEMDQZ 9[MTGU U WRMQY[ %JGEMDQZ UECVVGT PGY %JGEMDQZ 9[MTGU RWPMVQY[ %JGEMDQZ TGIRNQV PGY %JGEMDQZ .KPKC TGITGULK %JGEMDQZ FCVCYKP PGY %JGEMDQZ 2QMC FCPG FQWDNG=? FCVC )TCRJU DI )TCRJU UI )TCRJU TR CVC9KP FC 4GICVC TF
  • 110. Rozdział 8. ♦ Statystyka i wykresy 239 RWDNKE 5VCVU9KP FQWDNG XCNU=? ] FCVC XCNU CRCOKúVCL TGHGTGPELú FQ FCP[EJ CFF9KPFQY.KUVGPGT PGY 9KPFQY#FCRVGT ] RWDNKE XQKF YKPFQY%NQUKPI 9KPFQY'XGPV YG ] UJWVFQYP _ _ 7VYQTGPKG OGPW ETGCVG/GPW OKCPC WM CFW QMPC EGPVTQYCPKG MQORQPGPVÎY UGV.C[QWV PGY (NQY.C[QWV (NQY.C[QWV%'06'4 UGV5KG PGY KOGPUKQP UGV6KVNG 5VCVKUVKECN CVC TF 5VCVUTGITGUU FCVC 7UVCYKGPKG HQTOCVW OKGLUECOK RQ RTGEKPMW PHUGV/CZKOWO(TCEVKQPKIKVU -QPUVTWMELC Y[L EKC 5VTKPI OUVT VT[ ] 2QDTCPKG OQF[ LG NK KUVPKGLG OUVT PHHQTOCV 5VCVUOQFG FCVC _ ECVEJ 0Q/QFG'ZEGRVKQP GZE ] OUVT GZEVQ5VTKPI _ 5VTKPI UVT TGFPKC PHHQTOCV 5VCVUOGCP FCVC P /GFKCPC PHHQTOCV 5VCVUOGFKCP FCVC P /QFC OUVT P 1FEJ[NGPKGUVCPFCTFQYG PHHQTOCV 5VCVUUVFGX FCVC PP 4ÎYPCPKG TGITGULK TFGSWCVKQP P9URÎ E[PPKM MQTGNCELK PHHQTOCV TFEQT 7OKGUEGPKG Y[L EKC Y RQNW VGMUVQY[O UVCVU6# PGY 6GZV#TGC UVT 6GZV#TGC5%41..$#45A010' UVCVU6#UGV'FKVCDNG HCNUG QFCPKG MQORQPGPVÎY FQ QMPC CFF UVCVU6# CFF DCT CFF UECVVGT CFF TGIRNQV CFF FCVCYKP QFCPKG PCU WEJKYCPKC DCTCFF+VGO.KUVGPGT VJKU
  • 111. 240 Java. Sztuka programowania UECVVGTCFF+VGO.KUVGPGT VJKU TGIRNQVCFF+VGO.KUVGPGT VJKU FCVCYKPCFF+VGO.KUVGPGT VJKU UGV8KUKDNG VTWG _ 1DU WIC CO[MCPKC QMPC RWDNKE XQKF CEVKQP2GTHQTOGF #EVKQP'XGPV CG ] 5VTKPI CTI 5VTKPICGIGV#EVKQP%QOOCPF KH CTI %NQUG ] UJWVFQYP _ _ 7 [VMQYPKM OKGPK QRELú RWDNKE XQKF KVGO5VCVG%JCPIGF +VGO'XGPV KG ] KH DCTIGV5VCVG ] KH DI PWNN ] DI PGY )TCRJU FCVC )TCRJU$#4 DICFF9KPFQY.KUVGPGT PGY 9KPFQY#FCRVGT ] RWDNKE XQKF YKPFQY%NQUKPI 9KPFQY'XGPV YG ] DCTUGV5VCVG HCNUG DI PWNN _ _ _ _ GNUG ] KH DI PWNN ] DIFKURQUG DI PWNN _ _ KH UECVVGTIGV5VCVG ] KH UI PWNN ] UI PGY )TCRJU FCVC )TCRJU5%#66'4 UICFF9KPFQY.KUVGPGT PGY 9KPFQY#FCRVGT ] RWDNKE XQKF YKPFQY%NQUKPI 9KPFQY'XGPV YG ] UECVVGTUGV5VCVG HCNUG UI PWNN _ _ _ _ GNUG ] KH UI PWNN ] UIFKURQUG UI PWNN _ _ KH TGIRNQVIGV5VCVG ] KH TR PWNN ] TR PGY )TCRJU FCVC )TCRJU4')2.16
  • 112. Rozdział 8. ♦ Statystyka i wykresy 241 TRCFF9KPFQY.KUVGPGT PGY 9KPFQY#FCRVGT ] RWDNKE XQKF YKPFQY%NQUKPI 9KPFQY'XGPV YG ] TGIRNQVUGV5VCVG HCNUG TR PWNN _ _ _ _ GNUG ] KH TR PWNN ] TRFKURQUG TR PWNN _ _ KH FCVCYKPIGV5VCVG ] KH FC PWNN ] FC PGY CVC9KP FCVC FCCFF9KPFQY.KUVGPGT PGY 9KPFQY#FCRVGT ] RWDNKE XQKF YKPFQY%NQUKPI 9KPFQY'XGPV YG ] FCVCYKPUGV5VCVG HCNUG FC PWNN _ _ _ _ GNUG ] KH FC PWNN ] FCFKURQUG FC PWNN _ _ _ 7VYQTGPKG OGPW RTKXCVG XQKF ETGCVG/GPW ] /GPW$CT ODCT PGY /GPW$CT UGV/GPW$CT ODCT /GPW HKNG PGY /GPW 2NKM /GPW+VGO ENQUG PGY /GPW+VGO COMPKL HKNGCFF ENQUG ODCTCFF HKNG ENQUGCFF#EVKQP.KUVGPGT VJKU _ COMPKúEKG QMKGP RTKXCVG XQKF UJWVFQYP ] KH DI PWNN DIFKURQUG KH UI PWNN UIFKURQUG KH TR PWNN TRFKURQUG KH FC PWNN FCFKURQUG UGV8KUKDNG HCNUG FKURQUG _ _