Java. Sztuka programowania

1,349 views

Published on

Przejdź na wyższy poziom programowania dzięki dwóm "guru" Javy: Herbowi 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 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, skończywszy na analizatorach wyrażeń, narzędziach statystycznych i apletach finansowych -- wszystkie aplikacje są gotowe do użycia. Można je też dowolnie modyfikować i rozszerzać.

W książce znajdziesz:

* Omówienie zalet języka Java,
* Tworzenie analizatora wyrażeń numerycznych,
* Tworzenie agenta przeszukującego internet,
* 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:
Herb Schildt jest autorytetem w sprawach języków C, C++, Java i C#, a także doskonałym programistą systemu Windows.
[więcej...]


James Holmes jest konsultantem do spraw tworzenia programowania oraz aplikacji serwerowych w środowiskach biznesowych.
[więcej...]


Jeżeli poznałeś już podstawy Javy, to czas na następny krok.

* Uwolnij siłę drzemiącą w Javie i w jej bibliotekach.
* Niezwykle różnorodne przykłady praktycznych aplikacji.
* Cenny kod źródłowy do wykorzystania we własnych projektach.

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,349
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java. Sztuka programowania

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 13. ,G NK VC YCTVQ è Y[UVúRWLG Eú EKGL PK RQRTGFPKG CRCOKúVCL Læ
  14. 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. 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. 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. 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. 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. 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. 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. 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. 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. 23. KZ#XI VGOR KZ#XI
  24. 24. KZ#XI _ D VGORVGOR PCNGKGPKG C C [#XI D
  25. 25. Z#XI 1DNKEGPKG YURÎ E[PPKMÎY MQTGNCELK HQT KPV K K XCNUNGPIVJ K XCNU=K? K EQT VGORXCNUNGPIVJ EQT UVFGX XCNU
  26. 26. UVFGX XCNU TGVWTP PGY 4GICVC C D EQT ; PHHQTOCV C PHHQTOCV D
  27. 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. 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
  29. 29. KORQTV LCXCVGZV
  30. 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. 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. 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. 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. 34. Rozdział 8. ♦ Statystyka i wykresy 225
  35. 35. ,G NK VC YCTVQ è Y[UVúRWLG Eú EKGL PK RQRTGFPKG CRCOKúVCL Læ
  36. 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. 37. XCNU=K?CXI UVF XCNUNGPIVJ UVF /CVJUSTV UVF TGVWTP UVF _
  38. 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. 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. 40. KZ#XI VGOR KZ#XI
  41. 41. KZ#XI _ D VGORVGOR
  42. 42. 226 Java. Sztuka programowania PCNGKGPKG C C [#XI D
  43. 43. Z#XI 1DNKEGPKG YURÎ E[PPKMÎY MQTGNCELK HQT KPV K K XCNUNGPIVJ K XCNU=K? K EQT VGORXCNUNGPIVJ EQT UVFGX XCNU
  44. 44. UVFGX XCNU TGVWTP PGY 4GICVC C D EQT ; PHHQTOCV C PHHQTOCV D
  45. 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. 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. 47. KORQTV LCXCCYVGXGPV
  48. 48. KORQTV LCXCCRRNGV
  49. 49. KORQTV LCXCWVKN
  50. 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. 51. 1MTG NC KNQ è OKGLUEC FQ RQQUVCYKGPKC OKúF[ QDUCTGO FCP[EJ C MTCYúFKæ
  52. 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. 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. 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. 55. ,G NK YCTVQ è OKPKOCNPC LGUV FQFCVPKC W [L LCMQ OKGLUEC RQEæVMQYGIQ LG NK YCTVQ è OCMU[OCNPC LGUV WLGOPC W [L
  56. 56. KH OKP OKP KH OCZ OCZ
  57. 57. 1DNKE QFNGI Q è OKúF[ OKPKOWO K OCMUKOWO
  58. 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. 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. 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. 61. UECNG KH OKP IFTCY5VTKPI OKP KPUNGHV DCUGNKPG KPV OKP
  62. 62. UECNG HOIGV#UEGPV
  63. 63. 230 Java. Sztuka programowania 9[ YKGVN YCTVQ EK IFTCY5VTKPI FCVCNGPIVJ FCVCNGPIVJ
  64. 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. 65. UECNG IFTCY.KPG K
  66. 66. J)CR NGHV DCUGNKPG K
  67. 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. 68. UECNG IFTCY4GEV K
  69. 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. 70. UECNG IFTCY4GEV K
  71. 71. J)CR NGHV DCUGNKPG X _
  72. 72. Rozdział 8. ♦ Statystyka i wykresy 231 4[UQYCPKG NKPKK TGITGULK IFTCY.KPG NGHV DCUGNKPG KPV TFC
  73. 73. UECNG J)CR
  74. 74. FCVCNGPIVJ NGHV DCUGNKPG KPV TFC TFD
  75. 75. FCVCNGPIVJ
  76. 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. 77. 1MTG NC KNQ è OKGLUEC FQ RQQUVCYKGPKC OKúF[ QDUCTGO FCP[EJ C MTCYúFKæ
  78. 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. 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. 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. 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. 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. 83. ,G NK YCTVQ è OKPKOCNPC LGUV FQFCVPKC W [L LCMQ OKGLUEC RQEæVMQYGIQ LG NK YCTVQ è OCMU[OCNPC LGUV WLGOPC W [L
  84. 84. KH OKP OKP KH OCZ OCZ
  85. 85. 1DNKE QFNGI Q è OKúF[ OKPKOWO K OCMUKOWO
  86. 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. 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. 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. 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. 90. UECNG KH OKP IFTCY5VTKPI OKP KPUNGHV DCUGNKPG KPV OKP
  91. 91. UECNG HOIGV#UEGPV 9[ YKGVN YCTVQ EK IFTCY5VTKPI FCVCNGPIVJ FCVCNGPIVJ
  92. 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. 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. 94. UECNG IFTCY.KPG K
  95. 95. J)CR NGHV DCUGNKPG K
  96. 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. 97. UECNG IFTCY4GEV K
  98. 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. 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. 100. UECNG IFTCY4GEV K
  101. 101. J)CR NGHV DCUGNKPG X _ 4[UQYCPKG NKPKK TGITGULK IFTCY.KPG NGHV DCUGNKPG KPV TFC
  102. 102. UECNG J)CR
  103. 103. FCVCNGPIVJ NGHV DCUGNKPG KPV TFC TFD
  104. 104. FCVCNGPIVJ
  105. 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. 106. KORQTV LCXCCYVGXGPV
  107. 107. KORQTV LCXCWVKN
  108. 108. KORQTV LCXCVGZV
  109. 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. 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. 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. 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 _ _

×