This document provides an introduction to programming in the Java language. It discusses key concepts of computer systems including hardware, operating systems, and application software. It explains that hardware and software work together in a computer system. The document is intended to teach both beginning and advanced programming concepts in Java, including object-oriented programming principles. It aims to clearly and simply explain the basic concepts of programming in Java.
This document provides an introduction to programming in the Java language. It discusses key concepts of computer systems including hardware, operating systems, and application software. It explains that hardware and software work together in a computer system. The document is intended to teach both beginning and advanced programming concepts in Java, including object-oriented programming principles. It aims to clearly and simply explain the basic concepts of programming in Java.
This document provides an introduction to programming in the Java language. It discusses key concepts of computer systems including hardware, operating systems, and application software. It explains that hardware and software work together in a computer system. The document is intended to teach both beginning and advanced programming concepts in Java, including object-oriented programming principles. It aims to clearly and simply explain the basic concepts of programming in Java.
This document provides an introduction to programming in the Java language. It discusses key concepts of computer systems including hardware, operating systems, and application software. It explains that hardware and software work together in a computer system. The document is intended to teach both beginning and advanced programming concepts in Java, including object-oriented programming principles. It aims to clearly and simply explain the basic concepts of programming in Java.
Gjergji Shaska Electrical and Computer Engineering Oakland University
Mirserdht n kt botim t programimit n gjuhn Java. Un jam munduar tju shrbej studentve, msuesve dhe t gjith t interesuarve t msojn si t programojn n gjuhn Java. Ky tekst sht menduar t shrbej si pr fillestar ashtu dhe pr nivele m t avancuara. Un jam munduar ta shkruaj kt libr n mnyr sa m t qart dhe t thjesht. N kt libr jepen konceptet baz t programimit n Java, e cila sht gjuha m e prdorshme n ditt tona. Gjuha Java sht nj gjuh relativisht e re, e krijuar n vitin 1995 nga Sun Microsystems. Kjo gjuh bazohet n C++, por afron nj modelim m t thjesht t cilat ja lehtsojn punn prdoruesit. Nse doni t keni sukses me kt libr, sugjerimi im sht t rishkruani do program q do t jepet n formn e shembujve, ndryshoni pjes t veanta t tij dhe vreni output. Ky sugjerim sht sidomos i rndsishm pr ata t cilt nuk kan eksperienc me programimin. Prgjat ktij libri mbahet nj balanc ndrmjet programimeve grafike dhe programimeve jografike. N kt libr do t prdoren si BlueJ ashtu dhe Eclipsec. Un pasi prdora pr disa vjet BlueJ kur fillova t prdor Eclipsec e gjeta at m t thjesht dhe me m shum funksione. Un ju sugjeroj q t lexoni Appendix II pasi jepet mnyra e instalimit t Eclipsec dhe hapat e para t krijimit t nj projekti n t.
Shnim: Java software sht nj software q ju mund dhe duhet ta instaloni nga interneti. Prej Mait 2007 Sun Microsystems e ofron kt software falas.
Prmbajtja *******************PJESA E PAR******************* Kapitulli 1 HYRJE N JAVA PROGRAMING 1.1 Sistemi i Kompiuterit 10 1.2 Prbrsit e Hardwarit 13 1.3 Kompiuter Network dhe Internet 19 Kapitulli 2 OBJECT-ORIENTED PROGRAMMING 2.1 Problem Solving 24 2.2 Bazat e Object-Oriented Software 26 Kapitulli 3 KARAKTERISTIKAT E STRING 3.1 Print dhe Println 31 3.2 String Concatenation 33 Kapitulli 4 VARIABLES DHE ASSIGNMENT 4.1 Variables 38 4.2 Assignment Statement 39 4.3 Primitive Data Types 41 4.4 Data Conversation 42 4.5 Teknika t Konvertimit 43 Kapitulli 5 EXPRESSIONS DHE SCANNER CLASS 5.1 Expressions 47 5.2 Operatort Rrits dhe Zbrits 50 5.3 Klasat Scanner 51 Kapitulli 6 FJALIT E KUSHTZUARA 6.1 Fjalia if 56 6.2 Prdorimi i Fjalive n Bllok 62 6.3 Fjalit switch 68 Kapitulli 7 FJALIT LOOP 7.1 Fjalit while loop 73 7.2 Nested loops 79 7.3 Fjalia do while loop 83 7.4 For loop 87 Kapitulli 8 PRDORIMI I KLASAVE DHE OBJEKTEVE 8.1 Deklarimi import 95 8.2 Klasa Random 95 8.3 Klasa Math 98 8.4 Formatimi i output 101 8.5 Tipet Enumerated 103 Kapitulli 9 T SHKRUASH KODIN E KLASAVE 9.1 Anatomia e Klass 108 9.2 Encapsulation 113 Projekti 1 120 *******************PJESA E DYT******************* Kapitulli 10 GRAPHICS DHE APPLETS 10.1 Graphics 130 10.2 Applets 138 Kapitulli 11 KOMPONENTT DHE KONTENIERT 11.1 Graphical User Interfaces GUI 145 11.2 Frames dhe Panels 145 11.3 Nested Panels 148 Kapitulli 12 OBJEKTET GRAFIKE 12.1 Prdorimi i Klasave t Ndara 153 12.2 Butonat 165 12.3 Fushat e Tekstit 169 Kapitulli 13 OBJEKTET GRAFIKE ME IF DHE FOR 13.1 Vizato me Fjalit e Kushtzuara if 175 13.2 Vizato me Fjalit Loop 179 Kapitulli 14 DIALOG BOXES, CHECK BOXES, RADIO BUTTONS 14.1 Dialog Boxes 185 14.2 Check Boxes 189 14.3 Radio Buttons 190 Kapitulli 15 IDENTIFIKIMI I KLASAVE DHE OBJEKTEVE 15.1 Identifikimi i Klasave dhe Objekteve 201 15.2 Variablat dhe Metoda Static 202 Kapitulli 16 MARRDHNIET NDRMJET KLASAVE 16.1 Dependency 209 16.2 Aggregation 217 Kapitulli 17 INTERFACES DHE ENUMERATED 17.1 Interfaces 226 17.2 Enumerated 232 Kapitulli 18 PRDORIMI I ARRAYS 18.1 Deklarimi dhe Prdorimi i Arrays 238 18.2 Objektet Arrays 245 Kapitulli 19 ARRAYS DY DIMENSIONALE 12.1 Arrays dy Dimensionale 260 12.2 Arrays Shumdimensionale 266 Projekti 2 269 Appendix I 280 Appendix II 282
Page 7 of 275
Kapitulli 1
HYRJE N PROGRAMIMIN N JAVA
Ky libr sht konceptuar n menyr t till, q t ndihmoj studentt n t msuarin sa m t mir t t shkruarit t programeve n gjuhn Java. far ne do t msojm n kt libr sht shum e rndsishme jo vetm n gjuhn Java por n t kuptuarin e koncepteve t programimit. Q t harrish t shkruash programe duhet t harrish t kuptosh disa ide baz t programimit. Pr kt s pari ne duhet t kuptojm disa koncepte baz t sistemit t kompiuterit. Hardwari dhe softwari bashkpunojn n nj kompiuter pr t realizuar qllime t ndryshme. Ky kapitull pik s pari do t diskutoj disa proese baz n nj sistem kompiuteri dhe pastaj do t shpjegoj programimin duke u futur n programimin n Java dhe bazat e object-oriented programming.
1.1 Sistemi i Kompiuterit Ne po e fillojm shpjegimin e nj sistem kompiuteri me disa terminologji thelbsore dhe duke treguar se si sistemi i kompiuterit ndrlidhet. Nj sistem kompiuteri sht i ndrtuar nga hardware dhe software. Jan kto dy komponent q bashkpunojne me njri-tjetrin q na lejojn t prdorim kompiuterin. Hardware sht nj komponent fizik i sistemit t kompiuterit. Ata prfshin chips, telat, keyboards, disks, kabllat, printers, monitors dhe shum paisje t tjera si kto. Ideja sht q nse ne mund ta prekim fizikisht dhe sht pjes e nj sistemi kompiuteri, ather ai sht hardware. Por nj hardware nuk mund t kryej asnj funksion pa disa urdhra q tu tregoj atyre far t bjn. Nj program sht nj seri urdhrash q hardwari duhet t ndjeki njri pas tjetrit. Nj program sht ruajtur n memorien e kompiuterit n Page 8 of 275
formn e nj numri binary q quhet machine instructions. S bashku hardwari dhe softwari na japin mundsin t zgjidhim probleme t ndryshme nga m t thjeshtt deri te m t komplikuarit. N nj sistem kompiuteri prbrsit kryesor t hardwarit jan: 1. Central processing unit (CPU) 2. Input/Output (I/O) 3. Main memory 4. Secondary memory device Central processing unit (CPU) zbaton t gjitha komandat n nj program. Input/Output (I/O) si pr shembull keybord, mouse, or monitor na lejon ne si prdorues t prdorim nj kompiuter. T gjitha programet dhe t dhnat jan mbajtur n nj device t quajtur memory e cila ndahet n dy kategori: main memory dhe second memory. Gjat kohs q CPU thrret nj program, main memory thrret kt program nga hard disku dhe ky program qndron n main memory pr aq koh sa ky program sht n prdorim. Secondary memory device sht vendi ku ruhen softwaret. M i rndsishmi sht hard disku ku ruhen t gjitha programet e nj kompiuteri. Floppy disk sht i ngjashm me hard diskun vetm se ruan shum m pak informacione. Por floppy disk ka avantazhin se mund t lvizet nga kompiuteri n kompiuter sipas nevojs. Fig. 1. 1 tregon se si informacioni lviz prgjat komponentave kryesor n hardware. Le ta ilustrojm kt me nj shembull. Supozojm se ne duam t thrrasim nj program. Si tham dhe m lart ky program sht i ruajtur n hard disk. Kur ne i krkojm kompiuterit t thrrasi kt program, nj kopje e ktij programi sht sjell nga hard disku n main memory. N kt moment CPU lexon urdhrat nga main memory dhe i zbaton ato njra pas tjetrs derisa vjen n fund t programit. Gjat ktij proesi programi mund t paraqesi data edhe n output si pr shembull n monitor. Ky proes sht shum i rndsishm n mbarvajtjen e puns n nj kompiuter. Software mund t klasifikohet n shum kategori por ne tani po prqndrohemi vetm tek system programs and application programs. Operating systems or OS sht disa programe t cilat menaxhojn nj kompiuter. Ai i lejon prdoruesit t komunikoj me nj kompiuter dhe menaxhon at. Gjithashtu ai prcakton kur programet jan t lejuara t thrriten, kur ato jan n main memory, dhe si hardware komunikon. Kjo sht puna e operating systems; t bj punn e Page 9 of 275
kompiuterit m t leht dhe t siguroj q kompiuteri sht duke punuar me efienc. Hardware Hardware Main memory CPU Hard disk Floppy disk Keyboard Monitor
Fig. 1. 1 Nj version i thjeshtuar i nj sistem kompiuteri. Sot n prdorim jan disa operating systems por m t prdorshmit jan Windows 2000, Windows XP dhe Vista q jan versione t Microsoft. Disa versione t Unix operating systems jan gjithashtu shum popullor, sidomos n kompiutera shum t mdhenj. Linux sht nj version i Unix q sht nj open source q nnkupton q shum njerz kan kontribuar pr t dhe kodi i tij afrohet pr kdo falas. Kjo sht nj nga arsyet q Linux po bhet gjithmon dhe m shum nj favorit i fort. Nj tjetr operating system is Mac OS q sht i prdorur nga Apple kompiuters. Nj aplikation sht nj term q prdoret jo vetm pr operating system por pr do software. Application software jan programet t cilat e bjn kompiuterin m t prdorshm pr prdoruesin. Database managers, Web browsers, lojrat dhe shum t tjera mund t konsiderohen application programs. Graphical user interface (GUI) sht nj prej sistemeve pr shumicn e operating systems. Graphical user interface (GUI) na jep mundsin t krijojm paraqitje grafike t ndryshme n ekran. Disa nga kto element jan. 1. Windowns, q prdoret t ndaj ekranin ne hapsira t ndryshme. 2. Icons, q jan imazhe t vogla q paraqesin burimet e kompiuterit, si p.sh. nj file. Page 10 of 275
3. Pull-down menus, q i jep mundsin prdoruesit t zgjedh nga nj list me opsione. 4. Buttons, q mund t klikosh me nj mouse pr t treguar nj zgjedhje t perdoruesit. N disa pjes t veanta t ktij libri jan t krkuara disa njohuri baz si, digital computers apo binary numbers. Ne po japim shkurtimisht iden e ktyre dy koncepteve por nuk po futemi n detaje, pasi ato jan koncepte jasht qllimit ton. Gjenden dy teknika baz pr t ruajtur dhe menaxhuar t dhnat n nj kompiuter: analog dhe digital. Analog sht nj informacion i cili sht i vazhdushm ose i thn n fjal t tjera pr do koh (t) ne jemi n gjendje t prcaktojm amplitudn. Digital sht ai proes i cili e copton informacionin n pjes. E thn ndryshe gjendet nj numr i fundm time (t) pr t cilin ne mund t prcaktojm amplitudn. Digital computers ruajn informacionin duke e coptuar at n pjes dhe duke e paraqitur do pjes si nj numr. Por t gjitha informacionet n nj kompiuter jan t ruajtura dhe menaxhuara n binary value dhe jo n decimal value. Binary numbers kan vetm dy digit t cilat jan 0 dhe 1. Prgjat ktij libri ne do t dizenjojm dhe do t shkruajm shum programe q do t kryejn llogaritje, do t marrin vendime, dhe do t kontrollojn grafikt. Pr t realizuar kto qllime prgjat ktij libri ne do t prdorim gjuhn e programimit n Java.
1.2 Prbrsit e Hardwarit Computer hardware sht pjesa fizike e nj kompiuteri, ku prfshihen dhe qarqet digitale. N Fig. 1. 2 sht paraqitur nj figur e pjesve kryesore n nj kompiuter. Le t analizojm prbrsit e nj sistemi kompiuteri n detaje. 1.2.1 Central Processing Unit (CPU) Computer architecture prshkruan se si prbrsit e kompiuterit jan vendosur s bashku. N Error! Reference source not found.2 sht paraqitur nj model i nj kompiuteri. Duke pasur gjithashtu parasysh Fig. 1. 1 (ne sugjerojm ta rishikoni kt figur) dy prbrsit m kryesor n nj kompiuter jan CPU dhe main memory. Si ne e shpjeguam dhe m par, main memory ruan programet dhe t dhnat q jan n prdorim dhe CPU i zbaton urdhrat e programit njri pas tjetrit deri sa shkon n fund t tij. Page 11 of 275
N nj kompiuter t gjitha lvizjet jan te komanduara nga CPU i njojtur ndryshe si truri i nj kompiuteri. CPU q quhet gjithashtu processor ndahet n dy pjes t mdha: datapath dhe control unit Fig. 1. 3.
Fig. 1. 2 Modeli i arkitekturs n nj kompiuter. Datapath konsiston n register file dhe n arithmetic logic unit (ALU). Register file konsiston n nj ose m shum registra, t cilat kan nj pozicion n CPU. Register file e bn programin t punoj me m shum efikasitet dhe numri i register file ndryshon nga kompiuteri te kompiuteri. T gjitha veprimet arithmetike dhe vlersimet kryhen n ALU. Kjo (ALU) merr t dhnat nga main memori and register file, kryen llogaritjet dhe n se sht e nevojshme shkruan rezultatin mbrapa n main memori ose registers. Control Unit Datapath Arithmetic Logic Unit Registers Processor CommonBus (address, data, & control) Memory Program Storage Data Storage Output Units Input Units Figure 1.1 Computer Organization
Fig. 1. 3 Organizimi i nj Kompiuteri. Control unit prmban urdhrat logjike pr hardware. Ai monitoron efikasitetin e ktyre urdhrave dhe vepron si arbitr n shum drejtime pr burimet e CPU. Program couter (PC) sht nj regjistr q ka control unit, e cila kontrollon Page 12 of 275
adresn n memorie pr at q do t ndodh m von. N se do ta prkufizonim n nj mnyr m t thjesht do t thoshim se PC shikon se far do t ndodh n hapin tjetr. T gjitha devices n nj kompiuter jan quajtur peripherals, t cilat operojn n ant e fundit t nj sistemi. Prdorusi nuk mund t lidhet direkt me CPU opo main memory. Megjithse ne tham q CPU dhe main memory jan dy komponentt m kryesor ato nuk mund t prdoren pa peripheral devices. Aktiviteti i ktyre devices kontrollohet nga controllers. Pr m tepr controllers shpesh fokusohen n transmetimin e informacionit, duke lehtsuar punn e CPU q t fokusohet n t tjera aktivitete. 1.2.2 Input/output Devices Input jan data t ardhura n nj sistem dhe output jan data q drgohen nga sistemi. Input devices m t prdorshme jan keyboard and mouse. Disa t tjera m pak t prdorshme jan: microfonat t cilt prdoren nga sisteme q interpretojn komanda zri t thjeshta, skanerat q konvertojn tekstin, fotografit, apo grafikt n formn e lexushme nga makina. Pr output devices m t prdorshme prmendim monitorat dhe printerat. Disa devices i ofrojn t dyja mundsit input dhe output si p.sh. modems or network cards. Gjithashtu CPU dhe main memory mund t konsiderohen si I/O devices pasi ato transferojn data n t dy drejtimet brenda dhe jasht. Input/output dhe secondary memory devices jan konsideruar peripherials sepse ato operojn n ant e sistemit. Secondary memory dhe data transfer devices jan konsideruar gjithashtu si I/O devices sepse ato prezantojn nj burim informacioni si input dhe drgojn informacionin si output. 1.2.3 Main memory and Second Memory Memory sht vendi ku software dhe data ruhen. Nj kompiuter mund t prmbaj semiconductor, magnetic dhe optical memory. Ne do t diskutojm vetm semiconductor memory t cilat mund t klasifikohen n dy tipe: random acces memory (RAM) dhe read-only memory (ROM). RAM e cila sht m e njojtur pr ne me kt emr n t vrtet sht main memory. Main memory i referohet nj memorie fizike q sht brenda n kompiuter, i cili mund t manipuloj data q ndodhen n main memory. Madhsia e main memory sht shum e rndsishme sepse ajo prcakton sa programe mund t punojn n t njjtn koh dhe sa data t lexushme mund t jen t gatshme n nj program. Secili pozicion n memorie ka nj dhe vetm nj binary numr q quhet address. Kjo ide mund t konceptohet e njjt me adresat q ne kemi n shtpit tona, ku secila shtpi ka nj dhe vetm nj adres. N kt mnyr bhet e mundur q Page 13 of 275
postieri t identifikoj se ku duhet t adresoj do informacion postar. Mbajeni n mendje kt ide, pasi informcioni n kompiuter lviz n mnyr t ngjashme dhe n do moment duke ju referuar adresave se ku duhet t ruaj informacionin. Kur nj data ruhet n nj memory location ajo rishkruan dhe shkatrron do informacion t mparshm. N shum kompiutera do pozicion n memorie ka tet bits ose nj byte informacion. Nj koncept i rndsishm rreth objekteve q ruhen n memorie sht jo vetm se ato mund t interpretohen si data, binary numerik data etj por gjithashtu ato mund t interpretohen si udhzus n vetvete n nj mnyr uniforme. Kjo ide sht trajtuar nga John von Neuman architecture q nga 1950. Neuman ishte i pari q dha konceptin e ruajtjes s programeve dhe t informacioneve s bashku n main memory. Ideja baz se si operon nj kompiuter sht fetch-decode-execute, e cila sht koha gjat s cils nj kompiuter lexon dhe operon komandat nga memoria. Komandat s pari duhet t jen fetched nga main memory dhe pastaj t ekzekutohen nga CPU. Pik s pari CPU paraqet vlern e program counter (PC) n address bus. Pas ksaj CPU fetches komandat nga main memory n memory data register (MDR) dhe kt e bn nprmjet data bus. Kjo vler q ndodhet MDR tani vendoset n current instruction register (ICR) nj qark q mban komandat kshtu q ato mund t kodohen dhe t ekzekutohen. Ideja e fetch- decode-execute sht thelbsore se si nj kompiuter operon. do informcion ka dy komponent t cilt jan adresa dhe prmbajtja. CPU komunikon me memorien pik s pari duke identifikuar pozicionin e adress dhe pastaj e kalon kt adres n address bus. Kjo ide sht e ngjashme me postierin e posts i cili q t shprndaj nj letr m par ka nevoj pr adresn se ku do ta oj kt letr. Kjo ide e transferimit t data nprmjet memory dhe CPU duke prdorur data bus sht ilustruar n Fig. 1. 4. CPU Address bus l ines Dat a bus li nes Memory Figure 1.6 Transferring dat a between CPU and memory
Fig. 1. 4 Transferimi i data ndrmjet CPU dhe memory Page 14 of 275
Madhsia e memories matet n bytes , nj byte prmban 8 bits. Nj madhsi 4-bit quhet nibble, nj 16-bit quhet a word. Si e kemi prmendur dhe m lart kompiuteri sht nj paisje q prdor numra binary pra vetm 0 dhe 1 kshtu q t gjitha adresat e ruajtura do t jen n fuqi t dyt. Duke qn se kta numra jan shum t mdhenj pr t thjeshtur madhsin e matjes s memories sht prdorur njsia kilobyte (kB), e cila sht e dhn nga formula: 1024 2 10 = = k Nj njsi tjetr e prdorshme sht megabyte (MB), q jepet nga formula: 1048576 1024 1024 2 20 2 = = = = k M N Fig.1.5 paraqiten njsit n binary t cilat jan m leht t mbahen mend duke i rrumbullakosur vlerat. Pr shembull kilobyte sht m leht ta rrumullakosim n 1000 byte, ose megabyte n 100000 byte. Shum kompiutera personal kan 512 megabytes main memory ose RAM. Nj main memory e madhe lejon programe t mdhaja n prdorim apo shum programe n prdorim. Random access Memory (RAM) i lejon procesorit t lexoj dhe t shkruaj n do pozicion t memories n chip. RAM sht volatile q do t thot q nse korenti do t shkputet ather informacioni q ndodhet n t do t humbas. Prandaj sht e rekomanduar q gjat puns ne ta ruajm shpesh her punn q ne jemi duke br n mnyr q informacioni t ruhet n secondary device si sht hard disku. Secondary memory device jan nonvolatile q do t thot nse korrenti shkputet informacioni ruhet n t. M t prdorshmet secondary device q ruajn data jan hard disku dhe flopy disk. Njesia Simboli Numri I bytes kilobyte KB 2^0 = 1
1.3 Kompiuter Network dhe Internet Nj network sht dy ose m shum kompiutera t lidhur s bashku t cilt mund t shkmbejn informacion me njri-tjetrin. Duke arritur kt lloj lidhje nprmjet shum kompiuterave ne rrisim efikasitetin e shkmbimit t Page 15 of 275
informacionit. Nj shembull i till sht nj printer i lidhur me shum kompiutera n nj laborator i cili u krijon mundsin t gjith studentve t prdorin vetm nj printer. Nj Internet sht nj lidhje kompiuteri q lidh milliona kompiutera n gjith botn. Q t kuptojm m mir iden e internetit referohuni Fig. 1. 6 ku ne po japim disa pjes t internetit. N gjuhn e internetit t gjitha pjest si TVs, portable komputerat, cell phones, Web, automobilat etj quhen host ose end systems.
Fig. 1. 6 Disa pjes t internetit. End systems jan lidhur s bashku nprmjet nj networku lidhjesh (communication links) dhe packet switches. Gjenden disa tipa communication links t cilat jan t prodhuara nga materiale t ndryshme si: kabllot koaksial, fijet e bakrit, fibrat optike etj. Secila prej tyre mund t transferoj data me shpejtsi t ndryshme e cila matet n bits/second. Kur nj end system do t drgoj data n nj tjetr end system, end system q drgon data i formaton ato n formn e segmenteve dhe u vendos secilit nga nj adres t quajtur header. N kompiuter network kto segmente jan quajtur packets. Pas krijimit t ktyre packets ato jan hedhur n network pr t shkuar n destinacion. Gjenden shtat tipe layer internet t cilat jan disi m t vjetra pr tu prdorur, por akoma t prdorshme dhe pes layer internet t cilat jan m t prdorshme dhe ne po i prshkruajm m posht. Vini re mnyrn se si ato jan paraqitur nga lart posht, pra duke filluar nga numri pes tek numri nj. 5. Application layer: DHCP DNS FTP Gopher HTTP IMAP4 IRC NNTP XMPP POP3 RTP SIP SMTP SNMP SSH TELNET RPC RTCP RTSP TLS (and SSL) SDP SOAP GTP STUN NTP 4. Transport layer TCP: UDP DCCP SCTP RSVP ECN Page 16 of 275
Q t kuptohet m mir ideja e packet e cila sht shum e rndsishme ne po e ilustrojm me nj shembull t thjesht nga jeta e prditshme. Imagjinoni nj fabrik e cila do t lviz nga nj vend n nj tjetr. Pik s pari puntort fillojn t montojn makinerit dhe ti paketojn ato me kujdes duke u vendosur dhe nga nj mbishkrim do paketimi pr ti mbajtur mend. Kjo korespondon me segmentet q ne krijuam dhe formuam packet. Pas ksaj puntort vazhdojn duke i ngarkuar ato npr makina q ti zhvendosin n fabrikn e re. Kjo korespondon me network n computer network. Kur materialet mbrrijn n fabrikn e re puntort e ksaj fabrike shikojn mbishkrimet dhe marrin vendimet pr ti montuar makinerit prsri. E njjta gj ndodh dhe me packet, pasi ato arrijn n destinacion marrsi merr vendimet duke u bazuar n header q ato kan. Le t kthehemi prsri n diskutimin ton se si host komunikon me njri-tjetrin. do host ka nj dhe vetm nj IP adres ka dhe i dallon nga njri-tjetri. Si pr shembull do kompiuter q ne prdorim ka adresn e tij, nga dhe dallohet se me cilin jemi duke komunikuar. Nj Internet adres sht pr shembull gjergji.univlora.edu.al n t ciln pjesa e par e adress s internetit sht adresa lokale e cila tregon prdorusin n universitet dhe pjesa tjetr sht domain pr networkun e kompiuterave t Universitetit t Vlors.
Fig. 1. 4 Modeli i nj Networku. Page 17 of 275
do router ka vetm nj lidhje n internet si dhe ju e shikoni nga Fig. 1. 4. Nyjet A, B, C, D, E dhe F paraqesin routers ndrsa lidhjet midis tyre paraqesin physical link n network. do routers mund t komunikoj me cilindo routr n internet q do t thot q ai ka mundsi t zgjedhi rrugn me koston m t ult. Mos u keqkuptoni ktu me rrugn m t shkurtr, pasi koston e prcakton routers dhe jo lidhjet ndrmjet tyre. Pr shembull kostua m e ult pr informacionin pr tu transferuar nga A (burimi) n C (destinacioni) sht ADEC.
Page 18 of 275
USHTRIME DHE PROBLEMA
1.1 Prshkruaj komponentt e hardwarit t kompiuterit tuaj ose t nj kompiuteri n lab, prfshi tipin dhe shpejtsin e processorit, kapacitetin n main dhe second memory dhe tipet e I/O. 1.2 Shpjego ndryshimin ndrmjet random access memory (RAM) dhe read-only memory (ROM). 1.3 Nse nj fotografi sht br prej 128 ngjyrave, sa bits jan t nevojshm pr t ruajtur seciln pixel t fotografis?
Page 19 of 275
Kapitulli 2
OBJECT-ORIENTED PROGRAMMING
Si shkruhet nj program kompiuteri? Nse ju jeni nj fillestar, ju shkruani kodin, startoni programin dhe pastaj mundoheni t rregulloni gabimet. Pr programet e vegjl kjo teknik mund t funksionoj, por pr programet t cilt prdoren n industri nevoiten shum hapa t tjer. Dy jan metodat e prdorura n programim: procedural programming dhe object-oriented programming. Procedural sht nj version i vjetr i gjuhve t programimit kshtu q ne do t fokusohemi vetm tek object-orientit programming. Ashtu si dhe emri e tregon Java sht nj gjuh me nj objektiv t orientuar, e cila do t thot q objejkti sht thelbsor n nj gjuh Java. Ne do t fokusohemi n zhvillimin e programeve duke prcaktuar objekte q ndrlidhen me njri-tjetrin.
2.1 Problem Solving Paralelisht me gjuht q quhen high-level language si C++ apo Java, u zhvillua dhe ideja e object-oriented software. Por vitet kur object oriented language arriti vrtet nj popullaritet t gjer ishin vitet 1980. Sot kjo gjuh sht shum e prdorshme n shum deg t industris. Duke ju referuar gjithmon ides se t shkruarit e nj programi sht q ne t lehtsojm punn pr t zgjidhur nj problem t caktuar, object oriented programming bn pikrisht kt, zgjith nj problem. Kur ne skicojm zgjidhjen e nj problemi t caktuar ne prdorim fjal nga jeta e prditshme pr t shprehur do qllim, t cilat n gjuhn e softwarit quhen klasa. Pr t ilustruar kt ide nj shembull sht nj aplikim regjistrimi i nj studenti n nj universitet, n t cilin ne do t zgjedhim studentt dhe notat nga gjimnazi si klasa t mundshme. Pr tu theksuar sht se dikush tjetr mund t krijoj t tjera klasa dhe gjithashtu merr zgjidhjet e krkuara.
Page 20 of 275
Le t diskutojm iden e problem solving duke u drejtuar n disa karakteristika t object-oriented q ndihmojn n zgjidhjen e problemave. Fillimisht kur ne duam t zgjidhim nj problem t caktuar, ne duhet t mundohemi ti grupojm idet n dy grupe: kush jan t dhnat dhe si t realizojm zgjdhjet. Duke mbajtur parasysh kto dy grupe n prgjithsi problem solving konsiston n disa etapa: t kuptosh problemin t analizosh krkesat t skicosh zgjidhjet t marrsh n analiz zgjidhje t tjera t shkruash programin ta testosh t rregullosh gabimet nse ka Gjat zgjidhjes s nj problemi kto hapa duhen mbajtur mir parasysh dhe t tregohet shum kujdes n seciln prej tyre, ndryshe zgjidhjet q do t marrim mund t mos jen t krkuarat. Le tu referohemi secils prej tyre m n detaje. Hapi i par sht t kuptuarit e problemit n drejtimin e duhur. Kjo do t thot q sht jashtzakonisht e rndsishme t kupojm fillimisht se kush sht qllimi i problemit t dhn, ndryshe ne do t marrim rezultate t gabuara. E prsris q kjo sht shum e rndsishme pasi zgjidhja e nj problemi duke shkruar nj program, shum her sht e ndryshme nga zgjidhja e nj problemi si ju mund t jeni msuar deri tani, si n matematik, fizik apo shkenca t tjera. Kjo ka lidhje dhe me faktin q sht e pamundur t shkruash nj program nse nuk i kupton gjith etapat se ku duhet t kalohet. Nse do ta thoshim me pak fjal elsi i skicimit t nj zgjidhje problemi sht ta ndash problemin n pjes. Zgjidhja e problemit pr seciln pjes dhe integrimi i t gjithave s bashku na jep qllimin ton final, at t t zgjidhurit t problemit ton. Por nuk sht e thn q ne t arrijm t gjitha qllimet q n skicimin e par, ne mund t hasim n shum probleme gjat rrugs dhe mund t shtojm apo t heqim sipas nevojs pjes t ndryshme t projektit t par. Sa m par ti hasim kto probleme aq m t leht do e kemi ti fiksojm ato. Fig. 2. 1 shpjegon pikrisht far ne tham m lart. T shkrush programin do t thot t implementosh at skicim q ne bm pr zgjidhjen e atij problemi. Shpesh t shkruarit e nj programi sht menduar si t shkruarit e nj kodi. Hapi i fundit n zgjidhjen e problemit sht tesimi i zgjidhjeve pr t gjetur ndonj gabim nse ka dhe rregullimi i tyre. Por ky lloj testimi nuk do t thot se nuk ekzistojn akoma proleme me programin ton. Prgjat ktij libri ne do t msojm shum teknika programimi duke u futur n detaje por gjithmon ne duhet t mbajm mend qllimin pr t cilin ne po shkruajm nj program; zgjidhjen e nj problemi.
Page 21 of 275
Fig. 2. 1 Etapat pr realizimin e nj softwari.
2.2 Bazat e Object-Oriented Software Konceptet baz t object-oriented programming t cilat ne do i shpjegojm kapitull pas kapitulli jan: Object Attribute Method Class Encapsulation Inheritance Polymorphism Object sht nj element thelbsor n nj program i cili shpesh sht nj objekt nga jeta jon e prditshme. do object ka nj state dhe nj behavior. Me state ne kuptojm karakteristikat thelbsore q prcaktojn nj objekt si n shembullin e nj studenti n Univesitetin e Vlors t dhn m lart, mesatarja e notave sht pjes e state t studentit. Behaviors jan aktivitet e shoqruara me at objekt si pr shembull duke prdorur t njjtin shembull behaviors jan adresa apo depozita n llogarin e ktij studenti. Attributes jan vlerat q ne ruajm n object, q mund ti paraqesim si data t para ose objekte t tjera. Si pr shembull objekti n llogarin bankare t studentit
Page 22 of 275
mund t ruhet n decimal, n floting apo mnyra t tjera. Po mund t ket dhe attribute t tjera si sht emri i studentit. Nj method sht nj grup fjalish t cils i sht dhn nj emr. Kur nj method ekzekutohet fjalit e saj ekzekutohen njra pas tjetrs. Pr t gjetur mesataren e studentit n shembullin e msiprm ne mund t krijojm nj method q t llogaris kt mesatare bazuar n notat e studentit. Nj class sht modeli pr t ciln nj objekt sht krijuar. Supozojm se duam t ndrtojm nj makin. Pr kt ne duhet t ndrtojm do pjes t saj si; kabinn, timonin, sedilet, rrotat etj. Pasi ne ndrtojm do pjes t saj shum makina mund t ndrtohen bazuar n t njjtat pjes. Kto makina mund prdoren nga njerz t ndryshm n vende t ndryshme por ato ruajn t njjtat karakteristika si kabinn, timonin, sedilet, rrotat etj. Ne themi se kemi ndrtuar nj klas t ktij tipi makine. Nse ne duam t ndrtojm nje tip t ndryshm nga ky tip makine ne duhet t ndryshojm t paktn disa nga ato objekte q ne prdorm m lart si kabinn, timonin, sedilet, rrotat etj. Nse do t shkonim prsri mbrapa n shembullin ton pr studentin n Universitetin e Vlors do t thoshim se ne mund ta paraqesim si nj klas t quajtur, Regjistrimi, t gjith proesin q studenti mund t zgjedhi klasat dhe t regjistrohet. Encapsulation kupton mnyrn e mbrojtes q ne zgjedhim pr secilin objekt. Kjo do t thot q ne duhet t zgjedhim mnyrn e mbrojtes pr do objekt n mnyr t till q prdoruesi t jet n gjendje t ndryshoj apo jo sipas rastit objektin q ne kemi prdorur n nj klas. Tre jan mnyrat e deklarimit t nj objekti t cilat jan: private, public, dhe protected. Pr seciln prej tyre ne do t flasim kur t flasim pr encapsulation. Klasat e krijuara nga klasa t tjera ekzistuse jan quajtur inheritance. Nse do ta prkufizonim n nj kuptim m t gjer do t thoshim se inheritance sht nj form e riprdorimit t programeve, duke u bazuar n ngjashmrin ndrmjet tyre. Nj klas mund t prdoret pr t drejtuar disa klasa t tjera. Klasa e par q drejton disa klasa t tjera quhet parent classes (klasa prind) dhe klasat q jan t drejtuara nga kjo klas jan t quajtura children classes (klasa fmi). Kjo krijon nj lloj lidhje ndrmjet objekteve t cilat mund t prdoren dhe nga klasa t tjera, nese ne i deklarojm public. Polymorphism sht ideja q ne mund tu referohemi shum tipe t objekteve n mnyrn e dshiruar. Kjo na jep ne mundsin t krijojm zgjidhje shum m t kollajta se sa duke ndjekur rregullat normale, kur kemi parasysh se jemi duke prdorur shum objekte.
Page 23 of 275
N Fig. 2. 2 po paraqesim nj aspekt t object-oriented software t shembullit t studentit q ne kemi prdorur prgjat ktij kapitulli. Ne nuk presim q ju ti kuptoni kto ide n detaje tani, por n shumicn e ktij libri ne do t mundohemi ti shpjegojm ato.
Fig. 2. 2 Disa aspekte t object-oriented software
Page 24 of 275
USHTRIME DHE PROBLEMA
2.1 Prse sht i nevojshm dhe kush jan disa nga programet q object-oriented programing prdoret. 2.2 Kush jan shtat konceptet baz t object-oriented programing dhe shkurtimisht prshkruaj seciln prej tyre.
Page 25 of 275
Kapitulli 3
KARAKTERISTIKAT E STRING
Nj karakter string sht nj objekt n Java, i cili prcaktohet nga class String, i cili n programim sht shum i rndsishm. Duke u nisur nga kjo, n Java string vendoset ndrmjet dy thonjzave. Nj string mund t ket karaktere numerik, shenja piksimi apo dhe karaktere special.
3.1 Print dhe Println Prpara se t shpjegojm komandat print dhe println, t cilat prej ktij momenti do ti prdorim pothuajse kudo, le t japim disa shembuj strings. Vlora sht qyteti m i bukur n bot. My ID: G00033161
N fjalin e par ne po prdorim nj fjali t plot si nj string, e cila ka 38 karaktere. Kini parasysh si dhe tham m lart q dhe hapsira apo do lloj karakteri numrohet si nj karakter. N fjalin e dyt kemi nj string me 16 karaktere, ku kemi dhe numra. N fjalin e tret kemi nj string me nj karakter, e cila sht nj hapsire boshe. Le t prdorim tani kto koncepte t string pr t printuar fjalin e par. System.out.println ( Vlora sht qyteti m i bukur n bot. );
Page 26 of 275
Method printl sht nj shrbim q sht i ofruar nga System.out. object. N do koh q ne e prdorim at, object do t printoj n ekran karakteret e prbajtes s string. do data q ne drgojm n nj metod quhet parametr. N rastin ton println metod merr vetm nj parametr, karakteret e string pr t printuar. Metoda print sht nj tjetr System.out object. Metoda print sht shum e ngjajshme me metodn println prve se metoda println printon informacionin e krkuar dhe shkon n fillim t rreshtit tjetr, ndrsa metoda print vazhdon n t njjtin rresht. Le t analizojm far tham m lart me nj shembull n programin e treguar n Programi 3. 1 i cili prfshin t dyja komandat print dhe println. Vini re se si komanda print i printon n t njjtin rresht Vlora, Fieri dhe Tirana dhe vini re se si komanda println printon n outputin e par, e cila sht Vlora. Pastaj shkon n rreshtin e ri. Si e kemi prsritur dhe m par elsi i suksesit jo vetm n Java programming por dhe n do program tjetr sht t praktikosh do shembull. Nse ju nuk keni eksperienc me programimin shkruaj do shembull q ne do t japim sado i thjesht t duket ai dhe ndrysho pjes t ndryshme t programit dhe analizo output. Programi 3. 1 //******************************************************************** // Qytetet.java Author: Gjergji Shaska // // Ndryshimi ndermjet print dhe println. //********************************************************************
public class Qytetet { public static void main (String[] args) { System.out.print ("Vlora... "); System.out.print ("Fieri... ");
Page 27 of 275
System.out.print ("Tirana... "); System.out.println ("Vlora"); // pas kesaj fjalie printon ne rreshtin tjeter System.out.println ("Universiteti i Vlores"); } } Output---------------------------------------------------------------------------------------- Vlora... Fieri... Tirana... Vlora Universiteti i Vlores 3.2 String Concatenation Kur ne duam t printojm nj string q sht shum e gjat pr nj rresht, pr ta shkruar n t njjtin rresht prdorim string concatenation. Metoda q ne prdorim pr kt sht shenja (+). Vreni se si fjalia n vazhdim sht e printuar n t njjtin rresht. System.out.println ( Vlora sht qyteti m i bukur n bot, + sht qyteti ku u themelua shteti shqiptar. ); Vreni ndryshimin me fjalin n vazhdim e cila do t japi error nse ne do t provojm ta compile. System.out.println ( Vlora sht qyteti m i bukur n bot, + sht qyteti ku u themelua shteti shqiptar. ); Programi 3. 2 //**************************************************************** **** // Qytetet.java Author: Gjergji Shaska // // Shembull per string concatenation. //**************************************************************** ****
Page 28 of 275
public class Qytetet { //----------------------------------------------------------------- // Printon dy rreshtat ne te njejtin rresht. //----------------------------------------------------------------- public static void main (String[] args) { System.out.println ("Vlora eshte qyteti me i bukur ne bote, " + "eshte qyteti ku u krijua shteti shqiptar.");
// Printon nje fjali bosh. System.out.println ();
// Numrat konvertohen automatikisht System.out.println ("Vlora eshte qyteti ku ne " + 1912 + " lindi " + "shteti shqiptar.");
// Mbledh dy numra System.out.println ("Mblidh 10 me 15: " + (10 + 15)); } } Output---------------------------------------------------------------------------------------- Vlora eshte qyteti me i bukur ne bote, eshte qyteti ku u krijua shteti shqiptar.
Vlora eshte qyteti ku ne 1912 lindi shteti shqiptar.
Page 29 of 275
Mblidh 10 me 15: 25 N Programi 3. 2 gjenden disa fjali println. Si e shpjeguam dhe m lart komanda e par println printon n t njjtin rresht. N komandn e dyt printohet nj rresht bosh, pra do t krijohet nj ndarje ndrmjet fjalis s par dhe t dyt. N komandn e tret printohet nj fjali e cila prmban numra t cilt nuk jan brenda thonjzave, pra nuk jan n string. Pra nj vler numerike mund automatikisht t konvertohet n nj string dhe t dyja string bashkohen s bashku. Vreni tani ndryshimin me fjalin e katrt ku dy numra 10 dhe 15 jan mbledhur s bashku, pasi ata jan futur n kllapa. Tregoni kujdes n prdorimin e concatenates dhe veprimin aritmetik t mbledhjes s dy numrave. Dy thonjzat () prdoret n Java pr t treguar fillimin dhe fundin e nj string. Por jan disa teknika n Java pr t printuar fjalit t cilat jan prmbledhur n Fig. 3. 1. N Programi 3. 3 ne po japim nj shembull t fjals Flamurtari duke prdorur disa prej ktyre teknikave.
Escape Sequence Kuptimi \t tab \" double quote \' single quote \n rresht i ri \r carriage return \b backspace \\ backslash Fig. 3. 1 Java escape sequences Programi 3. 3 //******************************************************************** // Flamurtari.java Author: Gjergji Shaska // // Perdorimi i escape sequences. //******************************************************************** public class Flamurtari { //-----------------------------------------------------------------
Page 30 of 275
// Nryshimi i te printuarit te fjales Flamurtari. //----------------------------------------------------------------- public static void main (String[] args) { System.out.println ("Flamurtari,\n\tFlamurtari,\n" + "Flamurtari 1\tBarcelona 1,\n\tVlora eshte e gjitha ne feste."); } } Output---------------------------------------------------------------------------------------- Flamurtari, Flamurtari, Flamurtari 1 Barcelona 1, Vlora eshte e gjitha ne feste.
Page 31 of 275
USHTRIME DHE PROBLEMA
3.1 far outputi do t kemi nga kodi n vazhdim? System.out.println (Ismail Qemali shpalli pavarsine e Shqiprise); System.out.print ( n 1912.); 3.2 Shkruani nj kod ku t tregoet emri juaj n nj rresht t vetm. 3.3 Kush do t jet output pr kodin n vazhdim? System.out.print (); 3.4 Gjeni se ku qndron gabimi me kodin n vazhdim dhe rregullojeni at. System.out.println (Ismail Qemali shpalli pavarsine e Shqiprise n 1912
Page 32 of 275
Kapitulli 4
VARIABLES DHE ASSIGNMENT
Shumica e informacionit q ne japim n nj program jepet nprmjet variables. do programus ka mnyrat e veta t t konceptuarit dhe t paraqitjes s variablave, megjithat disa rregulla jan t prcaktuara nga Java language. Ne jemi t detyruar ti zbatojm me prpikmri kto rregulla n t kundrt compile do t na japi error.
4.1 Variables Nj variabl sht emri n t ciln nj data ruhet n memorie dhe tregon emrin t cilit i referohemi. Emrat referohen n Java pr tu drejtuar objekteve t ndryshme si: Emri i package q ju referuam m sipr System Class name si String Emrat e klasave, Flamurtari n shembullin e diskutuar n kapitullin 3. Emrat e metodave q ne prdorim gjat programimit. Emrat mund t jen t thjesht apo emri i ndjekur nga nj pik dhe nj identifikus si: System.out.println Studioni Program 4. 1 n t cilin ne po japim nj shembull se si variablat duhet t deklarohen para se t prdoren. Ne po deklarojm variabln lojtart si (int) dhe m pas kjo variabl sht prdorur n System.out.println pr t dhn numrin e lojtarve i cili sht 11. Provoni t ndryshoni variabln lojtart dhe vreni se si ndryshon output. Nj deklarim variable mund t ket disa variabla t deklaruara n t njjtin rresht. Gjithashtu kini parasysh far ne kemi shpjeguar m sipr ku variabla lojtart automatikisht konvertohet n string dhe bashkohet me t.
Page 33 of 275
Program 4. 1 // Lojtaret.java Author: Gjergji Shaska // // Shembull per declaration, initialization, dhe perdorimin e // integer variable. //**************************************************************** **** public class Lojtaret { //----------------------------------------------------------------- // Printon numrin e lojtareve ne nje skuader futbolli. //----------------------------------------------------------------- public static void main (String[] args) { int lojtaret = 11; System.out.println ("Nje skuader futbolli ka " + lojtaret + " lojtare."); } } Output---------------------------------------------------------------------------------------- Nje skuader futbolli ka 11 lojtare.
4.2 Assignment Statement N Program 4. 2 shikoni me kujdes se si programi ndryshon vlern e variabls. Deklarimi i par i variabls student sht i barabart me 22, pastaj i referohemi prsri variabls student duke e deklaruar 27 dhe hern e tret vlera e variabls student sht 30. Pr ta kuptuar kt ne po e printojm variabln student pas do deklarimi dhe vlera e variabls student n fund t prdorimit do jet 30. Kur secila prej fjalive ekzekutohet, shprehja n ann e djatht t barazimit (=) sht vlersuar dhe ruajtur n pozicionin e memories q tregohet nga variabla. Nj variabl mund t ruaj vetm nj vler n deklarimin e saj, nj deklarim i ri
Page 34 of 275
rishkruan nj vler t re n t. Kjo sht quajtur assignment statement sepse i jep nj vler t re variabls do her q i referohet. Tregoni kujdes pasi kur ne i referohemi nj variable vlera e saj nuk ndryshon, si psh kur e printojm at. Program 4. 2 //**************************************************************** **** // Studentet.java Author: Gjergji Shaska // // Shembull per perdorimin e assigment statements per te // ndryshuar vleren ne nje variable. //**************************************************************** ****
public class Studentet { //----------------------------------------------------------------- // Printon numrin e studenteve sa here qe ai ndryshon. //----------------------------------------------------------------- public static void main (String[] args) { int studente = 22; // declarimi i pare System.out.println ("Kjo klase ka " + studente + " studente.");
studente = 27; System.out.println ("Kjo klase ka " + studente + " studente.");
studente = 30; System.out.println ("Kjo klase ka " + studente + " studente.");
Page 35 of 275
} } Output---------------------------------------------------------------------------------------- Kjo klase ka 22 studente. Kjo klase ka 27 studente. Kjo klase ka 30 studente. Ndonjher ne prdorim t dhna q kan t njjtn vler prgjat programit dhe nuk mund t ndryshojn vlern. Data t tilla deklarohen si variabla konstante dhe pr tu dalluar nga data e zakonshme ato deklarohen me shkronja kapitale, si STUDENT nse do ta kishim deklaruar si variabl konstante n shembullin e msiprm. N Java fjala e rezervuar pr t cilsuar nj variabl konstante sht final si n shembullin e mposhtm. final int STUDENTS = 30; Nqoft se ne do t prpiqemi q t ndryshojm vlern e nj variable konstante prgjat nj programi compiler do t na jap error. E vetmja mnyr pr t ndryshuar nj variable konstante sht vlera e fillimit t saj. Nj tjetr arsye pse ne prdorim variabla konstante sht se imagjinoni nj program q ne do na duhet t ndryshojm nj vler. Nse nuk do t prdorim nj variabl konstante ne do na duhet t shkojm dhe t ndryshojm vlern e ksaj variable n do vend ku e kemi prdorur n program. Ndrsa kur ne prdorim nj variabll konstante ne ndryshojm vetm vlern kur e kemi deklaruar fillimisht dhe ajo automatikisht do t ndryshoj vlern e saj n t gjitha pozicionet ku sht prdorur.
4.3 Primitive Data Types N gjuhn Java gjenden tet primitive data types: katr jan pr integers numbers, dy jan pr floating numbers, nj character data dhe nj boolean data. Java ka dy lloje baz vlerash numerike: integers q nuk ka fraksione dhe floating q ka fraksione. Integers data jan katr tipe: byte, short, int dhe long. Jan dy tipe floating: float dhe double. Nj prmbledhje e tyre sht dhn n Fig. 4. 1. Tipet numerike jan signed, q nnkuptojn q t dyja numrat pozitiv dhe numrat negativ mund t ruhen n to. Duhet treguar kujdes se cili tip primitiv data duhet prdorur, e cila varet nga krkesat e programit q ne jemi duke shkruar. Megjithat m t prdorshmet n shembujt tan do t jen int, long dhe float.
Page 36 of 275
Tipi Ruajtja (bits) Vlera Min Vlera Max byte 8 -128 127 short 16 -32,768 32.767 int 32 -2,147,483,648 2147483648 long 64 -9.22337E+18 9.22337E+18 float 32 -3.4E+38 3.4E^+38 double 64 -1.7E^308 1.7E^308 Fig. 4. 1 Vlerat numerike pr do tip n Java luangage. Nj boolean vler n Java prdoret me fjaln e rezervuar boolean, e cila ka vetm dy vlera: true (e vrtet) dhe false (e gabur). Boolean jan gjersisht t prdorura n programim dhe prdoren kur kemi t bjm vetm me dy pozicione, e vrtet apo e gabuar. Vlerat pr boolean jan sidomos t prdorshm kur kemi t bjm me fjalit if dhe loops.
4.4 Data Conversation Ndonjher sht e nevojshme t konvertojm nga nj tip data n nj tjetr tip data por duhet t tregojm kujdes q mos t humbim data. E rndsishme pr tu kuptuar kur ne prdorim data conversation sht q ne mund t konvertojm nga nj tip data me madhsi m t vogl n nj tip data me madhsi m t madhe pa humbur data, kto quhen widening conversions. E anasjellta kur ne konvertojm nga nj tip data me madhsi m t madhe n nj tip data me madhsi m t vogl quhen narrowing conversions dhe mund t na japi humbje n data. Duke qen se widening conversions nuk kan humbje n vlera ato jan t sigurta dhe t rekomanduara t prdoren. N se duam t konvertojm nga byte n int ather kemi t bjm me widening conversions pasi po konvertojm nga byte q sht 8 bits to int q sht 32 bits. Pra madhsia e int sht m e madhe se mdhsia e byte kshtu q ky konvertim sht i sigurt, shiko Fig. 4.1. Nga data Ne data byte short, int, long, float, double short int, long, float, double char int, long, float, double int long, float, double long float, double float Double Fig. 4. 2 Java widening conversions.
Page 37 of 275
Nga ana tjetr nse do t konvertonim nga int n byte do t kishim humbje t data pasi int sht 32 bits dhe nuk mund t vendoset n byte q sht 8 bits. N kt rast kemi narrowing conversions. Fig. 4. 2 jep nj prmbledhje t primitive data pr Java widening conversions. Provoni si nj ushtrim t krijoni nj tabel t till pr narrowing conversions.
4.5 Teknika t Konvertimit Gjenden tre mnyra konvertimi n Java. 1) Assignment conversion 2) Promotion 3) Casting Assignment conversion ndoth vetm gjat widening convesions. Pr shembull, nse parat jan float variable dhe lekt jan int variable, ather fjalia n vazhdim do t konvertoj lekt n float. parat = lekt; Le t supozojm se variabla lekt sht 90, ather pasi fjalia t ekzekutohet n program variabla parat do t ket vlern 90,0. Ndrsa nse ne do t prpiqemi t konvertojm parat n lekt kur ta compile programin do t na japi error, q na tregon se kemi nj narrowing conversion pra mund t kemi humbje t data. Se si mund ta bjm kt konvertim do ta shpjegojm m posht ku do t shpjegojm casting. Konvertimi me promotion ndoth automatikisht kur ne kryjm veprime me variabla me tipe t ndryshme. Pra variabla automatikisht konvertohen n t njjtin tip dhe pastaj kryhet veprimi. Nj shembull t till ne e kemi par n prograpet q ne kemi prdorur m par por pa e kuptuar n detaje at. Kur ne prdorm nj variable me nj vler numerike, ajo automatikisht konvertohej n nj string dhe pastaj programi vazhdonte me veprimin n vazhdim. Pr ta kuptuar m mir shikoni fjalin n vazhdim ku B sht nj float variabl dhe C sht nj int variabl. Automatikisht programi do t konvertoj fillimisht variabln C n float dhe pastaj do t kryej veprimin. Pra gjat veprime t ndryshme prgjat programimit variablat duhet t jen t s njjts madhsi, por ne nuk duhet t shqetsohemi pr kt pasi n Java kjo kryhet automatikisht. A = B / C;
Page 38 of 275
Casting mund t themi se sht forma m e prdorshme n Java. Casting sht nj operator n Java q specifikohet nga emri n kllapa q vendoset para variabls. Nse do i referoheshim konvertimit t variabls parat n variabln lekt q prdorm m sipr ather m par duhet t konvertojm variabln parat n int. lekt = (int) parat; Nse vlera e variabls parat sht 50,4 ather ajo e variabls lekt do t jet 50, por vlera e variabls parat nuk do t ndryshoj.
Page 39 of 275
USHTRIME DHE PROBLEMA
4.1 Cili sht rezultati q ruhet n seciln prej variablave? int X, x1 = 10, x2 = 15, x3 = 25; double Y, y1 = 19.0, y2 = 15.34; a) X = x1 / 25; b) X = x1 / 25; c) X = x2 / x1; d) Y = y2 / y1; e) Y = (int) x2 / x1; f) Y = (double) x2 / x1; g) Y = (int) (double) x2 / x1; 4.2 A sht e mundur q ne t ndryshojm vlern e nj variable konstante gjat prdorimit t saj? Kush sht mnyra q ne mund ta ndryshojm vlern e saj?
Page 40 of 275
Kapitulli 5
EXPRESSIONS DHE SCANNER CLASS
N kt kapitull do t shpjegojm nj numr opearators q do i prdorim gjat programimit pr t kryer veprime t ndryshme. M pas do t vazhdojm me scanner class q sht pjes e Java class library dhe prdoret gjersisht pr t lexuar inputs.
5.1 Expressions Nj expression sht nj ose m shum operator q kryejn nj llogaritje t caktuar, rezultati zakonisht sht nj numr por mund dhe t mos jet. Por le t shpjegojm fillimisht shprehjet aritmetike t cilat prdorin numeric operands dhe resultati sht numerik. Shprehjet aritmetike m t prdorshme jan: mbledhja (+), zbritja (-), shumzimi (*) dhe pjestimi (/). Java ka dhe nj tjetr shprehje aritmetike e cila sht remainder (mbetja) operator (%) q na jep mbetjen pasi kryehet pjestimi. Pr shembull kur pjestojm 21 me 5 mbetja sht 1 pra n Java kjo do t shkruhet 21 % 5 dhe resultati do t jet 1. Pr tu theksuar sht se duhet pasur kujdes me shenjn e rezultatit i cili do jet shenja e numrit q pjestohet. Pra -31 % 6 rezultati do t jet -1. Disa operator mund t prdoren s bashku duke na krijuar shprehje m t ndrlikuara. Radha e kryerjes s veprimeve do t jet e njjt me at q ne kemi msuar deri tani n klasat e matematiks: shumzimi, pjestimi, mbetja, mbledhja dhe zbritja. Pra vini re se si fjalia n vazhdim do t ekzekutohet. studentt = 3 + 5 * 2;
Page 41 of 275
N krahun e djatht veprimi i par q do t kryhet sht shumzimi dhe resultati do t mblidhet me numrin 3 dhe rezultati i krahut t djatht do t vendoset n variabln studentt. Duhet treguar kujdes gjat ktyre veprimeve sepse programi do t copile n rregull dhe ne do t kujtojm se sht rezultati i sakt por n t vrtet mund t jet gabim. Radha e kryerjes s veprimeve n arithmetic operators sht nga e majta n t djatht. Rregulli i kllapave sht i vlefshm dhe n Java, pra ne mund t prdorim kllapat pr t detyruar nj veprim t kryhet para nj tjetri. Ne prdorm numrat n shembujt e msiprm por t njjtat rregulla jan t vlefshme dhe pr variablat. Shikoni shembullin n vazhdim: student = student + 1; Le t supozojm se vlera fillestare e variabls student sht 5, ather vlera e shprehjes n krahun e djatht do t jet 6. Kini kujdes me variabln student, vlera e saj nuk ndryshon. Le t shikojm me kujdes tani nj shembull m t ndrlikuar dhe ku kryhen shum veprime aritmetike. N Programi 5. 1 ne fillimisht kemi deklaruar disa variabla pr t kryer veprimet e mvonshme n program. Nuk sht e thn qe ne t jemi n gjendje t deklarojm cdo variabl q n fillim, ne sa her mendojm se na duhet nj variabl shkojm dhe e deklarojm at. M pas kryejm veprimet pr secilin operator: mbledhja, zbritja, shumzimi, pjestimi dhe mbetja. Tregoni kujdes dhe mos u ngatrroni me fjalin n vazhdim System.out.println(" i + j = " + (i + j)); ku pjesa i + j = sht nj string dhe pjesa (i + j) sht nj variabl. Provoni n Java kt program dhe analizoni outut. Programi 5. 1 //**************************************************************** **** // Aritmetik.java Author: Gjergji Shaska // // Veprime te thjeshta aritmetike //**************************************************************** ****
Page 42 of 275
public class Aritmetik { public static void main(String[] args) {
//deklarojme disa variabla int i = 15; int j = 25; double x = 15.5; double y = 25.5;
//mbledhja e numrave System.out.println("Mbledhja"); System.out.println(" i + j = " + (i + j)); System.out.println(" x + y = " + (x + y));
//zbritja e numrave System.out.println("Zbritja"); System.out.println(" i - j = " + (i - j)); System.out.println(" x - y = " + (x - y));
//shumezimi i numrave System.out.println("Shumezimi"); System.out.println(" i * j = " + (i * j)); System.out.println(" x * y = " + (x * y));
//pjesetimi i numrave System.out.println("Pjesetimi"); System.out.println(" i / j = " + (i / j));
Page 43 of 275
System.out.println(" x / y = " + (x / y));
//mbetja kur pjesetojme System.out.println("Moduli"); System.out.println(" i % j = " + (i % j)); System.out.println(" x % y = " + (x % y));
} } Output---------------------------------------------------------------------------------------- Mbledhja i + j = 40 x + y = 41.0 Zbritja i - j = -10 x - y = -10.0 Shumezimi i * j = 375 x * y = 395.25 Pjesetimi i / j = 0 x / y = 0.6078431372549019 Moduli i % j = 15 x % y = 15.5
Page 44 of 275
5.2 Operatort Rrits dhe Zbrits Gjenden dy increment (rrits) dhe decrement (zbrits) operator q jan ++ dhe --. Kta operator mund t vendosen prpara variabls (prefix) ose mbrapa variabls (postfix). Duhet treguar pak kujdes me seciln prej tyre pasi sht pak konfuze se si ato japin rezultate t ndryshme duke u prdorur n pozicione t ndryshme. Analizoni shembullin n vazhdim se si output ndryshon kur prdorim prefix dhe postfix. N rastin e par outut is 2 ndrsa n t dytin 1. x = 1; y = ++x; System.out.println(y);
printon 2, por n rastin tjetr do t kemi:
x = 1; y = x++; System.out.println(y);
printon 1 Ndrsa n rastin e mposhtm output do t jet i njjt 2. x++; output 2 ++x; output 2 Kini parasysh q: x++ sht e njjt me x = x + 1 dhe t dyja fjalit jan t prdorshme n Java. T gjitha sa tham m lart jan t vlefshme jo vetm pr rritjen por gjithashtu dhe pr zbritjen. Nj tjetr form e shkurtuar dhe mjaft e prdorshme sht mbledhja (+=), zbritja (-=), shumzimi (*=), pjestimi (/=) dhe mbetja (%=). Operator t till do t ndryshojn variabln me vlern q do u krkohet. Fjalia n vazhdim shpjegon kt kuptim. student += 3;
5.3 Klasat Scanner Scanner class sht nj klas n java.util, e cila lejon prdorusin t lexoj input vlera pr tipe t ndryshme. Fillimisht ne duhet t krijojm nj objekt
Page 45 of 275
scaner q t prfshij nj metod. Fjalia n vazhdim krijon nj objekt scaner q lexon input nga keboard. Scanner scan = new Scanner (System.in); Kjo krijon nj variabl t quajtur scan q paraqet Scanner object, i cili sht krijur nga new operator. System.in object paraqet input i cili sht keybord. Next method of the Scanner class lexon input q vjen m pas si nj string dhe e kthen at, por nse n input kemi disa fjal t ndara me hapsir ndermjet tyre ne duhet t thrrasim next pas do fjale. Metoda NextLine lexon t gjith input dhe e kthen at si nj strig. Shikoni se si idet q treguam m lart jan ekzekutuar n Programi 5. 2. Programi fillon me fjalin import e cila i tregon programit q ne do t prdorim Scanner class n kt program. Ne do ta shpjegojm m n detaje kt fjali n kapitujt n vazhdim. Programi 5. 2 //**************************************************************** **** // Lexo.java Author: Gjergji Shaska // // Tregon perdorimin e nextLine method. //**************************************************************** ****
import java.util.Scanner;
public class Lexo { //----------------------------------------------------------------- // Lexon nje character string nga perdorusi dhe e printon. //----------------------------------------------------------------- public static void main (String[] args)
Page 46 of 275
{ String lexo; Scanner scan = new Scanner (System.in);
System.out.println ("Shkruaj nje fjali:");
lexo = scan.nextLine();
System.out.println ("Ju futet fjalin: " + lexo + ""); } } Output---------------------------------------------------------------------------------------- Shkruaj nje fjali: Sa nxenes ka UV? Ju futet fjalin: Sa nxenes ka UV?
Page 47 of 275
USHTRIME DHE PROBLEMA
5.1 far do t printohet pasi kodi t ekzekutohet? System.out.println (3 plus 5 sht: + 3 + 5); 5.2 Pasi kodi n vazhdim t jet ekzekutuar kush do t jet vlera e variabls? gjatsia = 5; gjatsia = 10 + gjatsia *3; gjatsia = gjatsia / 5; gjatsia ++; 5.3 Shkruaj dy fjali q rrisin vlern e nj int variable me emrin tuaj dhe dy fjali q zvoglojn vlern e nj int variabl me mbiemrin tuaj. 5.4 Trego radhn e operimit pr seciln nga fjalit. a) a + (c b) * d b) a % (b + a) * c / d c) (a b) * (c + d) % b
Page 48 of 275
Page 49 of 275
Kapitulli 6
FJALIT E KUSHTZUARA
N kt kapitull do t shpjegojm fjalit e kushtzuara me if. Si dhe nnkuptohet nga titulli kto fjali i krijojojn prdoruesit mundsin t zgjedhi cila fjali do t ekzekutohet. do vendim merret n baz t nj kushti q nse sht i vrtet fjalia do t ekzekutohet ose nse nuk sht i vrtet fjalia nuk do t ekzekutohet.
6.1 Fjalia if Prpara se t shpjegojm fjalin if le t shpjegojm disa operator q jan shum t rndsishm jo vetm n programin Java por dhe n programet e tjera. Nj program fillon me fjalin e par dhe vazhdon hap pas hapi deri sa harrin n fund t programit. Rregullat n t cilat fjalit ekzekutohen n nj program quhen flow of control. Fjalit t cilat kontrollojn flow jan t ndara n dy kategori: conditionals dhe loops. N Fig. 6.1 po tregojm operatort dhe kuptimin e secilit prej tyre. Operator Kuptimi == e barabarte me != jo e barabarte me < me e vogel se <= me e vogel se ose e barabarte > me e madhe se => me e madhe se ose e barabarte Fig. 6. 1 Operators dhe kuptimi i tyre.
Page 50 of 275
N Fig.6.2 po japim operatort logjik q prdoren gjat fjalive t kushtzuara n programim. Operatort logjik kan vetm dy vlera: true (e vrtet) ose fallse (jo e vrtet). Operator Kuptimi ! logical NOT (jo i vertet) && logical AND (edhe) || logical OR (ose) Fig. 6. 2 Logical operators. Operatori (!) prdoret pr logical NOT operator i cili nse variabla sht e vrtet resultati do t jet jo i vrtet dhe e anasjellta nse variabla do t jet jo e vrtet rezultati do t jet i vrtet. Duhet pasur parasysh q vlera e variabls nuk ndryshon. Operatori && prdoret pr logical AND operator. Rezultati do t jet i vrtet vetm n rastin kur t dyja variablat jan t vrteta n t gjitha rastet e tjera rezultati sht jo i vrtet. || operator sht jo i vrtet vetm n rastin kur t dyja variablat jan jo t vrteta, n rastet e tjera sht i vrtet. far tham m lart jan t shpjeguara n Fig.6.3 ku n prgjithsi 0 prdoret pr jo t vrtet dhe 1 prdoret pr t vrtet. A B ! A !B A&&B A||B 0 0 1 1 0 0 0 1 1 0 0 1 1 0 0 1 0 1 1 1 0 0 1 1 Fig. 6. 3 Boolean algebra pr variablat A dhe B. N nj fjali ku t tre operatort jan t prdorur radha e kryerjes s veprimeve sht: logical NOT (!), logical AND (&&) dhe logical OR (||). Nse do i kthehemi prsri Fig.6.3 do t vm re se pr A && B mjafton q krahu i majt t jet 0 dhe rezultati do t jet 0 dhe pr A||B mjafton q krahu i majt t jet 1 resultati do t jet 1. Ky konkludim do na ndimoj n prcaktimin e shpejt t rezultatit gjat prdorimit t operatorve n fjalit if. Tani ne jemi gati t vijm n at q sht qllimi i ktij kapitulli, fjalia if. Nj fjali if konsiston n fjaln e rezervuar if e ndjekur nga nj shprehje boolean dhe nga nj fjali tjetr. Nse kushti sht i vrtet fjalia do t ekzekutohet dhe nse kushti nuk sht i vrtet fjalia nuk do t ekzekutohet dhe programi do t vazhdoj m posht. Le ta analizojm kt me nj shembull t thjesht ku supozojm se x dhe y jan dy variabla t cilat i marrin vlerat nga fjalit e msiprme n program. Nse vlera e variabls y do t jet m e madhe se vlera e variabls x ather fjalia n vazhdim do t ekzekutohet ku y do ti shtohet 1, nse
Page 51 of 275
vlera e variabls y do t jet m e vogl se vlera e variabls x ather fjalia n vazhdim nuk do t ekzekutohet. if (y > x) y += 1; Fig. 6. 4 paraqet nj flow chart pr nj fjali if. Si dhe ju e shikoni nga skema e paraqitur n fiur fillimisht sht vlersuar kushti i dhn i cili ka dy mundsi i vrtet ose jo i vrtet. Nse kushti do jet i vrtet programi do t vazhdoj me fjalin n vazhdim, nse kushti nuk do t jet i vrtet programi do ta anashkaloj fjalin dhe do t vazhdoj m posht.
Fig. 6. 4 Si funksionon nj fjali if. Le t shohim tani fjalin if dhe if else n nj program t plot n Java. N Programi 6. 1 ne kemi krijuar klasn Mosha, ku i japim mundsin prdoruesit pr t printuar nj patent. Prdoruesit i krijohet mundsia t fus ditlindjen dhe nse prdoruesi sht nn 18 vje (fjalia if) nuk mund t ket nj patent dhe pr t gjitha kushtet e tjera (else) prdorusi mund t ket nj patent. Ndryshimi ndrmjet fjalive if dhe if else sht se nse fjalia if ka vetm nj kusht, fjalia if else ka dy kushte if dhe else. N qoft se kushti sht i vrtet ekzekutohet fjalia me if dhe nse kushti nuk sht i vrtet ekzekutohet fjalia me else.
Page 52 of 275
Programi 6. 1 //**************************************************************** **** // Mosha.java Author: Gjergji Shaska // // Perdorimi i nje fjalie if-else. //**************************************************************** ****
import java.util.Scanner;
public class Mosha { //----------------------------------------------------------------- // Lexon moshen dhe e printon sipas kushtit te dhene. //----------------------------------------------------------------- public static void main (String[] args) { final int MIN = 18;
Scanner scan = new Scanner (System.in);
System.out.print ("Kush eshte mosha juaj: "); int mosha = scan.nextInt();
System.out.println ("Ju futet: " + mosha);
if (mosha < MIN)
Page 53 of 275
System.out.println ("Na vjen keq ju nuk mund te merrni nje patent.");
else System.out.println ("Patenta juaj se shpejti do te jete gati."); } } Output---------------------------------------------------------------------------------------- Kush eshte mosha juaj: 20 Ju futet: 20 Patenta juaj se shpejti do te jete gati. Le t japim dhe nj tjetr shembull n Programi 6. 2 ku ne po prdorim s bashku if dhe if else n nj program pr t llogaritur pagesn e nj puntori n jav. Orari standart pr nj puntor n jav sht 40 or pune. Brenda ktij orari ai do t paguhet me 21.25 dollar dhe mbi 40 or n jav ai do t paguhet me nj her e gjysm. Kushti i par prcaktohet nga fjalia if (pra kur punon m pak se 40 or n jav) dhe pr do rast tjetr, fjalia else, do paguhet 40 or me t njjtn vler dhe ort e teprta me nj her e gjysm. Studioni me kujdes programin dhe provoni t fusni numra m t vegjl se 40 dhe m t mdhenj se 40. Analizoni output. Programi 6. 2 //**************************************************************** **** // Rroga.java Author: Gjergji Shaska // // Perdorimi i fjalise if-else. //**************************************************************** ****
public class Rroga { //----------------------------------------------------------------- // Lexon oret e punes dhe llogarit rrogen. //----------------------------------------------------------------- public static void main (String[] args) { final double PERORE = 21.25; // pagesa ne ore final int OREJAVE = 40; // standarti ore ne jave Scanner scan = new Scanner (System.in);
double paga = 0.0;
System.out.print ("Sa ore pune ne jave keni: "); int oret = scan.nextInt();
NumberFormat fmt = NumberFormat.getCurrencyInstance(); System.out.println ("Pagesa juaj: " + fmt.format(paga)); } } Output---------------------------------------------------------------------------------------- Sa ore pune ne jave keni: 45
Pagesa juaj: $1,009.38
6.2 Prdorimi i Fjalive n Bllok Nj block statement (fjali n bllok) jan disa fjali t vendosura n kllapa q ekzekutohen pasi vlersohet q kushti i fjalis if sht i vrtet. N kt rast ne duam t bjm m shum se nj veprim. N Programi 6. 3 ne po bjm nj loj t thjesht, ku po mendojm nj numr dhe pastaj po hedhim zarin duke shpresuar q t jet numri q ne menduam. Rolin e zarit n programin ton e kryen fjalia: Random gjeneron = new Random(); Dy variablat tona i kemi deklaruar int dhe n fjalin if po japim kushtin e problemit ton. Nse numri q ne shpresuam (provo) dhe numri i gjeneruar nga programi (prgjigja) jan t njjt fjalia Pergjigje e sakt do t printohet, n t kundrt do t printohen dy fjali: e para Nuk eshte numri i sakte dhe e dyta Numri ishte plus numrin q do jet n variabln pergjigja. Printimi i dy fjalive detyrohet nga prdorimi i kllapave, n t kundrt do t printohej vetm fjalia e par. Programi 6. 3 //******************************************************************** // Zare.java Author: Gjergji Shaska // // Perdorimi i block statement ne nje if-else. //********************************************************************
Page 56 of 275
import java.util.*;
public class Zare { //----------------------------------------------------------------- // Provo nje numer duke shpresuar qe eshte i sakti. //----------------------------------------------------------------- public static void main (String[] args) { final int MAX = 6; int pergjigja, provo;
Scanner scan = new Scanner (System.in); Random gjeneron = new Random();
pergjigja = gjeneron.nextInt(MAX) + 1;
System.out.print ("Po mendoj nje numer ndermjet 1 dhe " + MAX + ". Kush mund te jete: ");
provo = scan.nextInt();
if (provo == pergjigja) System.out.println ("Pergjigje e sakte."); else
Page 57 of 275
{ System.out.println ("Nuk eshte numri i sakte."); System.out.println ("Numri ishte " + pergjigja); } } } Output---------------------------------------------------------------------------------------- Po mendoj nje numer ndermjet 1 dhe 6. Kush mund te jete: 5 Nuk eshte numri i sakte. Numri ishte 4 Programi 6. 4 jep nj tjetr fjali t rndsishme fjalin else if. Tani q ju keni kuptuar prdorimin e fjalis if do ta keni fare t leht t kuptoni fjalin else if. Fjalia else if nuk sht gj tjetr vese nj prdorim i shum herve i fjalis if. Pra n programin n vazhdim ne po themi se nse variabla perqindja (q sht prqindja e marr n provim) sht m shum ose baraz me 90 % nota juaj do t jet 9. Tjetr fjali if (else if), nse variabla perqindja sht m shum ose baraz me 80 % nota juaj do t jet 8. Dhe kshtu programi vazhdon me notat e tjera deri sa n fjalin else kemi fjalin e cila nuk sht m e vrtet, pra sht false. Fjalia else sht nj praktik e mir pr tu prdorur n t gjitha rastet ku kemi nj fjali if pasi e detyron programin q t mos na japi rezultate jasht vlereva t lejuara. Programi 6. 4 //******************************************************************** // Nota.java Author: Gjergji Shaska // // Tregon perdorimin e fjalis else if. //********************************************************************
class Nota { public static void main(String[] args) {
Page 58 of 275
int perqindja = 92; char nota;
if (perqindja >= 90) { nota = '9'; } else if (perqindja >= 80) { nota = '8'; } else if (perqindja >= 75) { nota = '7'; } else if (perqindja >= 70) { nota = '6'; } else { nota = '4'; } System.out.println("Grade = " + nota); } } Output---------------------------------------------------------------------------------------- Grade = 9 Nj tjetr lloj fjalie duke prdorur if sht fjalia nested if. Kjo lloj fjalie prmban n vetvete dy fjali if, pr t cilat nse kushti i fjalis s par if sht i vrtet, vlersohet kushti i fjalis s dyt. Analizoni me kujdes Programi 6. 5 dhe shikoni se si funksionojn nested if. N kt program klasa Minimum vlerson tre numra nprmjet t cilve i jepet mundsia prdorusit t zgjedhi. Tre variablat numri1, numri2 dhe numri3 pasi zgjidhen nga prdorusi vlersohen nprmjet fjalis nested if. Fjalia e par if krahason numrin1 me numrin2, nse ai sht m i vogl kalohet n kushtin e fjalis s dyt if. Nse ai sht i vrtet ather numri1 sht minimumi.
public class Minimum { //----------------------------------------------------------------- // Lexon tre vlera nga perdorusi dhe percakton // kush eshte vlera me e vogel. //----------------------------------------------------------------- public static void main (String[] args) { int numri1, numri2, numri3, minimum = 0;
System.out.println ("Minimumi i tre numrave eshte: " + minimum); } } Output---------------------------------------------------------------------------------------- Fut tre numra: 4 5 6 Minimumi i tre numrave eshte: 4
6.3 Fjalit switch Nj tjetr fjali conditional n Java sht fjalia switch, e cila lejon t zgjidhet nj drejtim kur ka dhe shum mundsi t tjera pr t zgjedhur. Fjalia switch vlerson nj shprehje pr t prcaktuar nj vler dhe e gjen at vler ndrmjet shum t tjerave. Secila fjali case (rast) ka fjali t cilat ekzekutohen n rast se kushti pr fjalin case sht i vrtet. Nj fjali brake prdoret pr t shkputur ekzekutimin n seciln case t nj fjalie switch. Pa prdorimin e nj fjalie brake fjalia tjetr case do t ekzekutohej menjher. Fjalia brake na jep ne mundsin t ekzekutojm vetm nj case. Nse asnj rast nuk puqet me kushtet e programit ather prdoret fjalia default. sht e
Page 61 of 275
rndsishme t theksohet se shprehja e vlersuar n fillimin e nj fjalie switch duhet t jet e tipit char, byte, short ose int ndrsa vlera e secils case duhet t jet nj konstante, nuk mund t jet nj variabl. N Programi 6. 6 po japim prdorimin e nj fjalie switch. Ne po prdorim nj variabl kategori e cila na krijon dhjet kategori pr t pasur mundsin e dhjet notave. Pas ksaj pr do rast printojm prkatsisht n far niveli studenti sht. Vini re se si fjalia brake sht prdorur pas do case e cila tregon se programi nuk mund t ekzekutoj fjalin tjetr case. Programi 6. 6 //******************************************************************** // Notat.java Author: Gjergji Shaska // // Perdorimi i nje fjalie switch. //********************************************************************
import java.util.Scanner;
public class Notat { //----------------------------------------------------------------- // Lexon nje note nga studenti dhe jep rezultatin. //----------------------------------------------------------------- public static void main (String[] args) { int nota, kategori;
Scanner scan = new Scanner (System.in);
Page 62 of 275
System.out.print ("Fusni noten tuaj nga 0 ne 100: "); nota = scan.nextInt();
kategori = nota / 10;
System.out.print ("Nota eshte ");
switch (kategori) { case 10: System.out.println ("Ju lumte. Shkelqyshem."); break; case 9: System.out.println ("Shume mire."); break; case 8: System.out.println ("Mire."); break; case 7: System.out.println ("Mesatar."); break; case 6: System.out.println ("Poshte mesatares."); System.out.println ("Duhet te takohesh me profesorin.");
Page 63 of 275
break; default: System.out.println ("Nuk kalon."); } } } Output---------------------------------------------------------------------------------------- Fusni noten tuaj nga 0 ne 100: 93 Nota eshte Shume mire.
Page 64 of 275
USHTRIME DHE PROBLEMA
6.1 Ku qndron gabimi me kodin n vazhdim? if (y = x) System.out.println (Gjergji); 6.2 Kush do t jet fjala e printuar nga programi? int krahaso = 50, x = 40, y = 45; if (krahaso <= krahaso) { if (x ==y) System.out.println (Vlora); System.out.println (Fieri); } System.out.println (Tirana); 6.3 far ndodh nse nj case n nj fjali switch nuk mbaron me nj breake statement?
Page 65 of 275
Kapitulli 7
FJALIT LOOP
Ky kapitull do t na shpjegoj fjalit loop ose fjalit q prsriten, t cilat bjn t mundur q nj fjali t ekzekutohet disa her apo n pafundsi. Si dhe fjalit e kushtzuara fjalit loop kan t nevojshm nj shprehje boolean q prcakton sa her fjalia do t ekzekutohet.
7.1 Fjalit while loop Nj fjali while ekzekuton t njjtn fjali deri sa kushti bhet jo i vrtet. Si dhe fjalia if nj fjali while vlerson kushtin e dhn dhe nse sht i vrtet ekzekuton fjalit t quajtura ndryshe struktura e fjalis loop. Por n ndryshim nga nj fjali if fjalia while vlersohet prsri pasi t gjitha fjalit e strukturs s loop jan ekzekutuar dhe nse kushti sht i vrtet fjalit e loop ekzekutohen prsri dhe kjo prsritet dhe prsritet deri sa kushti bhet jo i vrtet. Nse kushti nuk bhet kurr jo i vrtet fjalia loop do t ekzekutohet n pafundsi. Fig. 7. 1 tregon llogjikn e nj fjalie while.
Page 66 of 275
Vleresohet kushti fjalia I vertete Jo I vertete
Fig. 7. 1 Llogjika pr fjalin while. Shikoni se si fjalia while do t ekzekutohet n kodin n vazhdim. Variabla num e cila fillimisht sht 0 krahasohet me numrin 10, pra 0 sht m e vogl se 10 kshtu q kushti plotsohet, programi do t ekzekutoj fjalin n vazhdim, pra do t printoj vlern e variabls num q sht 0. N fjalin tjetr variabla num sht rritur me nj pasi n t kundrt do t qndronim n vend dhe nuk do t kishim nj loop. Pas ksaj programi do t shkoj prsri t vlersoj kushtin e while loop, por tani variabla num nuk sht m 0 por sht 1. sht 1 m i vogl se 10, po, kshtu q do t ekzekutohet prsri while loop. N t njjtn mnyr programi do t ekzekutohet deri sa num t bhet 10. Kur num bhet 11 kushti nuk sht m i vrtet dhe ekzekutimi i loop prfundon. Pra gjithsej while loop do t ekzekutohet 11 her. int num = 0; while (num <= 10) { System.out.println (num); num++ } Le t shikojm tani n Program 7. 1 ku kemi prdorur while loop. N klasn Mesatarja prdorusi ka mundsin t fusi disa numra dhe kur do t llogaris
Page 67 of 275
mesataren e tyre duhet t fusi 0. Variabla numero bne t mundur q vlerat e futura nga prdorusi t numrohen dhe t prdoren pr t llogaritur mesataren, ndrsa variabla shuma bn t mudur mbledhjen e t gjith numrave q prdoruesi fut. Vini re me kujdes se si vlera 0 e bn kushtin e while loop jo t vrtet, pra while loop do t prfundoj dhe mesatarja e numrave do t llogaritet. Nse ju fusni vlern 0 q n fillim while loop nuk do t ekzekutohet dhe programi do shkoj tek fjalia if e cila do t shmangi pjestimin me 0 i cili nuk sht i mundur, provojeni at. Program 7. 1 //**************************************************************** **** // Mesatarja.java Author: Gjergji Shaska // // Perdorimi i while loop. //**************************************************************** ****
public class Mesatarja { //----------------------------------------------------------------- // Llogarit mesataren e numrave te futur nga perdorusi. // pasi fusni disa numra fut 0 per te llogarit mesataren //----------------------------------------------------------------- public static void main (String[] args) { int shuma = 0, vlera, numero = 0; double mesatarja;
Page 68 of 275
Scanner scan = new Scanner (System.in);
System.out.print ("Fute nje numer ose 0 per mesataren: "); vlera = scan.nextInt();
while (vlera != 0) // per 0 kushti nuk eshte i vertete { numero++;
shuma += vlera; System.out.println ("Shuma eshte " + shuma);
System.out.print ("Fute nje numer ose 0 per mesataren: "); vlera = scan.nextInt(); }
System.out.println ();
if (numero == 0) System.out.println ("Ju nuk futet ndonje vlere."); else { mesatarja = (double)shuma / numero;
} } } Output---------------------------------------------------------------------------------------- Fute nje numer ose 0 per mesataren: 85 Shuma eshte 85 Fute nje numer ose 0 per mesataren: 34 Shuma eshte 119 Fute nje numer ose 0 per mesataren: 0
Mesatarja 59.5 Le t shpjegojm dhe nj tjetr shembull n Program 7. 2. Ky program nuk sht gj tjetr vese nj tjetr prdorim i while loop por duke prdorur nj form tjetr kushti pr t. N kushtin e ksaj lupe ne po e bjm at t vrtet pr variabln fitore m t vogl se 0 dhe m t madh se numri i lojrave. N kt rast prdoruesi ka t drejt t fusi nj tjetr numr. Kur kushti i while loop nuk sht i vrtet programi do t shmangi while loop dhe do t ekzekutoj fjalin: raporti = (double)fitore / NUM_LOJE; Program 7. 2 //******************************************************************** // Lojera.java Author: Gjergji Shaska // // Perdorimi i while loop. //********************************************************************
{ //----------------------------------------------------------------- // Llogarit perqindjen e fituar te lojrave nga perdorusi. //----------------------------------------------------------------- public static void main (String[] args) { final int NUM_LOJE = 20; int fitore; double raporti;
Scanner scan = new Scanner (System.in);
System.out.print ("Fusni numrin e lojerave te fituara (0 to " + NUM_LOJE + "): "); fitore = scan.nextInt();
System.out.println ("Perqindja e fituar eshte: " + fmt.format(raporti)); } } Output---------------------------------------------------------------------------------------- Fusni numrin e lojerave te fituara (0 to 20): 15
Perqindja e fituar eshte: 75% sht e rndsishme q programuesi t shkruaj kodin n mnyr t till q while loop t kthehet jo e vrtet, ndryshe do t kishim nj infinit loop. Shikoni shembullin n vazhdim. int num = 5; while (num <= 10) //kjo eshte nje infinit loop { System.out.println (num); num-- } Variabla num fillon me vlern 5, e cila sht m e vogl se 10, pra kushti plotsohet dhe while loop ekzekutohet. Pas ksaj vlera e variabls num zvoglohet me 1, pra vlera e saj sht 4. E njjta gj prsritet gjith kohn dhe variabla num zvoglohet gjithmon dhe m shum. Kjo quhet infinite loop sepse variabla num nuk bhet kurr m e madhe se 10, kshtu q ekzekutohet gjat gjith kohs. Pr t ndaluar programin kur kemi t bjm me nj infinit loop ne mund t mbajm t shtypur butonin Control dhe t shtypim C.
7.2 Nested loops Nested loop jan t ngjashme me nested if q ne shpjeguam n kapitullin 6. Nj nested loop sht kur struktura e nj loop prmban dhe nj tjetr loop. Pr tu theksuar sht q pr secilin rast t loops s jashtme loopa e brendshme do t ekzekutohet plotsisht. Shikoni shembullin n vazhdim dhe vini re se sa her ekzekutohen loop e jashtme dhe loop e brendshme.
Page 72 of 275
int num1, num2; num1 = 1; while (num1 <= 5) //loop e jashtme { num2 = 1; while (num2 <= 10) //loop e brendshme { System.out.println (Vlora); num2++; } num1++; } Programi fillon me vlersimin e kushtit pr loopn e jashtme, n se sht i vrtet, q sht n rastin ton pasi variabla num1 fillon me 1, programi shkon n vlersimin e while loop t dyt. Vini re tani se si loop e brendshme do t ekzekutohet 10 her dhe pastaj kushti i saj bhet jo i vrtet. Ky proes do t vazhdoj prsri n t njjtn mnyr dhe loop e brendshme do t ekzekutohet 50 her ndrsa loop e jashtme 5 her. Le t shikojm tani nj lloj string q quhet palindrome, e cila quhet e till kur nj string lexohet e njjt kur e lexon nga e majta n t djatht dhe anasjelltas. N Program 7. 3 prdoruesi ka mundsin t fusi nj string nse ajo sht nj palindrome ather do t printohet: Kjo sht nj palindrom. dhe do i jepet mundsia prdorusit t zgjedhi nse do t fus nj string t re apo t prfundoj programin. Program 7. 3
//**************************************************************** **** // Palindrome.java Author: Gjergji Shaska // // Perdorimi i nested while loops.
public class Palindrome { //----------------------------------------------------------------- // Teston string dhe shikon nese jane palindromes. //----------------------------------------------------------------- public static void main (String[] args) { String str, tjeter = "y"; int majtas, djathtas;
Scanner scan = new Scanner (System.in);
while (tjeter.equalsIgnoreCase("y")) { System.out.println ("Fusni nje palindrome:"); str = scan.nextLine();
majtas = 0; djathtas = str.length() - 1;
while (str.charAt(majtas) == str.charAt(djathtas) && majtas < djathtas) { majtas++;
Page 74 of 275
djathtas--; }
System.out.println();
if (majtas < djathtas) System.out.println ("String nuk eshte nje palindrome."); else System.out.println ("String eshte nje palindrome.");
System.out.println(); System.out.print ("Testo nje tjeter palindrome (y/n)? "); tjeter = scan.nextLine(); } } } Output---------------------------------------------------------------------------------------- Fusni nje palindrome: abcd
String nuk eshte nje palindrome.
Testo nje tjeter palindrome (y/n)? y Fusni nje palindrome: abba
String eshte nje palindrome.
Page 75 of 275
Testo nje tjeter palindrome (y/n)? n Kodi pr kt program prmban dy while loop. Loop e jashtme kontrollon sa strings jan testuar dhe loop e brendshme shkon prgjat string karakter pas karakteri, deri sa ajo prcakton q string sht palindrom apo jo. Variablat majtas dhe djathtas ruajn indekset e dy karaktereve dhe si e shihi nga programi variabla majtas rritet me 1, ndrsa variabla djathtas zvoglohet me 1.
7.3 Fjalia do while loop Fjalia do while sht e njjt me fjalin while prvese kushti i saj vlersohet n fund t fjalis do while. Fjalit e strukturs n kt fjali do t ekzekutohen deri sa kushti i saj t bhet jo i vrtet, pra fjalit e strukturs s saj do ekzekutohen t paktn nj her. Vreni se si kjo fjali ekzekutohet n vazhdim. do { fjalit } while (shprehja); N Fig. 7. 2 tregohet llogjika skematike pr do while loop. Kjo loop ka t gjitha kushtet q kemi thn dhe pr wile loop, pra ne duhet t sigurohemi q kushti i saj plotsohet apo kthehet n jo i vrtet pasi fjalit e strukturs s saj jan ekzekutur disa her sipas programit.
Fig. 7. 2 Llogjika e do while loop.
Page 76 of 275
Le t shohim tani dy programe ku sht prdorur do while loop. N programin e par kodi nuk sht i komplikuar dhe sht kollaj pr tu kuptuar, ndrsa programi i dyt sht disi m i komplikuar. N Program 7. 4 variabla int num sht printuar do her q do wile loop sht ekzekutuar. Ne jemi t sigurt pr ekzekutimin e hers s par t saj, pasi ajo vlersohet n fund t fjalis while (num <= 10);. Pasi printohen numrat nga 1-10 kushti i saj nuk sht m i vrtet kshtu q ajo mbaron s ekzekutuari. Program 7. 4 //******************************************************************** // Dowhile.java Author: Gjergji Shaska // // Perdorimi i nje fjalie Do while. //********************************************************************
class Dowhile { public static void main(String[] args){ int num = 1; do { System.out.println("Numri eshte: " + num); num++; } while (num <= 10); } } Output---------------------------------------------------------------------------------------- Numri eshte: 1 Numri eshte: 2 Numri eshte: 3
Page 77 of 275
Numri eshte: 4 Numri eshte: 5 Numri eshte: 6 Numri eshte: 7 Numri eshte: 8 Numri eshte: 9 Numri eshte: 10 Le t kalojm tani n nj tjetr program i cili sht disi m i vshtir pr tu kuptuar. N Program 7. 5 i jepet mundsia lexuesit t fusi nj numr dhe programi e lexon at dhe e printon numrin duke filluar nga fundi. Remainder operator prdoret t prcaktoj digit n pozicionin e par dhe ja shton at numrit mbrapsht, pastaj duke prdorur pjestimin e kthen at n numrin e fillimit. Program 7. 5 //******************************************************************** // Mbrapsht.java Author: Gjergji Shaska // // Perdorimi i nje do while loop. //********************************************************************
import java.util.Scanner;
public class Mbrapsht { //----------------------------------------------------------------- // Lexon numrat duke filluar nga fundi. //----------------------------------------------------------------- public static void main (String[] args)
Page 78 of 275
{ int num, fundi, mbrapsht = 0;
Scanner scan = new Scanner (System.in);
System.out.print ("Fusni nje pozitiv numer: "); num = scan.nextInt();
do { fundi = num % 10; mbrapsht = (mbrapsht * 10) + fundi; num = num / 10; } while (num > 0);
System.out.println ("Numri i lexuar nga fundi eshte " + mbrapsht); } } Output---------------------------------------------------------------------------------------- Fusni nje pozitiv numer: 34567 Numri i lexuar nga fundi eshte 76543
7.4 For loop Fjalit while dhe do while prdoren kur ne nuk e dim fillimisht numrin e herve q loop do t ekzekutohet, ndrsa for loop prdoret kur ne duam t ekzekutojm
Page 79 of 275
nj loop me nj numr t caktuar hersh. For loop loop prmban tre pjes: fillimin i cili tregon vlern n t ciln loop do t filloj t ekzekutohet, fundi vlera e t cils tregon se deri n far vlere for loop do t vazhdoj t ekzekutohet dhe rritja e cila tregon se si do t ndroshoj (rritet apo zvoglohet) do her q loop do t ekzekutohet. Kini parasysh q fjalia e rritjes s loop ekzekutohet do her q for loop ekzekutohet. for (fillimi; fundi; rritja) { fjalit }
N Fig. 7. 3 paraqitet mnyra skematike e nj llogike for loop. Si tham dhe m sipr for loop fillon me pjesn e par q sht fillimi e cila sht nj fjali q ekzekutohet vetm nj her n fillim t for loop. N pjesn e dyt kemi kushtin e loop i cili vlersohet dhe kur sht i vrtet ekzekutohen fjalit n vazhdim, kur kushti nuk sht i vrtet for loop prfundon s ekzekutuari. N strukturn e loop kemi dhe rritja e cila ekzekutohet do her q for loop ekzekutohet dhe e rrit apo zvoglon variabln dhe kjo variabl vlersohet prsri n kushtin e loop. I
v e r t e t e
Fig. 7. 3 Llogjika pr nj for loop.
Page 80 of 275
Le t konsiderojm tani nj shembull t thjesht t cilin ju mund ta provoni dhe si nj program n Java. Klasa forloop sht prdorur pr t printuar variabln (i) do her q loop ekzekutohet. Vlera e par q do t printohet do t jet vlera n t ciln loop fillon, pra i = 1. Shikoni se si variabla (i) sht deklaruar brenda for loop, e cila shum her sht e praktikushme kur variabla nuk nevoitet jasht loop. Ekzekutimi i ktij programi do t printoj vlerat nga 1 deri n 10. class Forloop { public static void main(String[] args){ for(int i=1; i<11; i++){ System.out.println("Numri eshte: " + i); } } }
Vreni se si n shembullin e mposhtm po krijojm nj infinit loop. for ( ; ; ) { // infinite loop
// ketu eshte kodi }
Le t shohim tani Program 7. 6 se si programi printon vlerat deri n nj limit t siprm. Prdorusit i jepet mundsia t zgjedhi numrin shumzusit e t cilit do printohen dhe kufirin e siprm deri n far vlere do t printohet. Vreni me kujdes output dhe shikoni se si for loop sht ndrtuar. Pjesa e par sht shumezus = vlera dhe tregon se kush do t jet vlera e par q do t printohet. N pjesn e dyt kemi shumezus <= limit pra tregon vlern maksimale q do t printohet dhe pjesa e tret tregon se si rritja bhet duke i shtuar vlern t ciln prdorusi ka zgjedhur. Program 7. 6 //******************************************************************** // Shumezusi.java Author: Gjergji Shaska // // Perdorimi i for loop. //********************************************************************
import java.util.Scanner;
Page 81 of 275
public class Shumezusi { //----------------------------------------------------------------- // Printon shumezusit e nje numri te zgjedhur nga perdorusi //----------------------------------------------------------------- public static void main (String[] args) { final int PER_RRESHT = 7; int vlera, limit, shumezus, numero = 0;
Scanner scan = new Scanner (System.in);
System.out.print ("Fusni nje numer pozitiv: "); vlera = scan.nextInt();
System.out.print ("Fusni limitin e siperm: "); limit = scan.nextInt();
// Printon nje numer vlerash si output numero++; if (numero % PER_RRESHT == 0) System.out.println(); } } } Output---------------------------------------------------------------------------------------- Fusni nje numer pozitiv: 10 Fusni limitin e siperm: 100
Shmezusit e 10 ndermjet 10 dhe 100 jane: 10 20 30 40 50 60 70 80 90 100 N programin n vazhdim po japim nj shembull t nested loop. Vini re si loop e jashtme ekzekutohet saktsisht pes her, ndrsa loop e brendshme do t ekzekutohet n varsi t loop s jashtme. Program 7. 7 //******************************************************************** // Topat.java Author: Gjergji Shaska // // Perdorimi i nested for loops. //********************************************************************
public class Topat { //----------------------------------------------------------------- // Printon karakterin pike.
Page 83 of 275
//----------------------------------------------------------------- public static void main (String[] args) { final int MAX_RRESHT = 5;
for (int rresht = 1; rresht <= MAX_RRESHT; rresht++) { for (int pika = 1; pika <= rresht; pika++) System.out.print ("."); System.out.println(); } } } Output---------------------------------------------------------------------------------------- . .. ... .... ..... T treja llojet e loop (while, do while dhe for) jan pothuajse ekuivalente t njra tjetrs, por prdorimi i tyre varet nga situata t veanta n proram. Ndryshimi ndrmjet do while loop dhe while loop sht se do while loop ekzekutohet t paktn nj her edhe kur kushti i saj nuk plotsohet. N ndryshim nga for loop t dyja kto loop prdoren kur ne nuk e dim numrin q loop do t ekzekutohet.
Page 84 of 275
USHTRIME DHE PROBLEMA
7.1 Krahaso while loop dhe do while loop. Kush sht ndryshimi ndrmjet tyre? 7.2 Kur ne prdorim nj for loop n vend t nj while loop? 7.3 Kush do t jet output n kodin n vazhdim? int x = 0, y = 10; while (x < y) { System.out.printl (x); x += 2; } 7.4 Kush do t jet output n kodin n vazhdim? for (int x = 0; x <= 50; x +=4) System.out.printl (x); 7.5 Transformo kodin e while loop n do while loop. int x = 1; while (x < 10) { System.out.printl (x); x ++; } 7.6 Transformo kodin e while loop t ushtrimit t msiprm n for loop.
Page 85 of 275
Kapitulli 8
PRDORIMI I KLASAVE DHE OBJEKTEVE
N kt kapitull ne do t prdorim klasat dhe objektet pr manipulimin e strings, pr llogaritje t ndryshme, formatuar output sipas nevojs etj. Prdorimi i klasave dhe objekteve sht thelbsor n object-oriented programing, ku lexusi do t marri bazat pr t shkruar nj program. Ne i kemi prdorur klasat dhe objektet n t kaluarn por pa u futur shum n detaje n shpjegimin e tyre, ndrsa ky kapitull fokuset n to. Gjithashtu n kt kapitull do t japim iden e tipeve enumerated, t cilat jan klasa speciale n Java dhe shum her prdorimi i tyre do t na lehtsoj shum punn gjat programimit.
8.1 Deklarimi import Klasat e java.lang package jan automatikisht t vlefshme pr prdorim kur shkruan nj Java programing. Pr ti prdorur ato ju duhet ti referoheni nj deklarimi import. Kujtoni shembujt kur ne kemi prdorur nj klas Scanner e cila prdorte nj deklarim import si: import java.util.Scanner; Kur ky deklarim bhet gjat programimit ne i referohemi vetm emrit Scanner. Nse ne nuk do t bjm nj deklarim t till ne do na duhet ti referohemi emrit t plot sa her ne kemi nevoj pr t gjat programimit. Kjo mnyr referimi sht zakonisht e prdorshme kur ne i referohemi nj apo dy packages, por pr tu referuar t gjitha klasave q jan n package ne prdorim nj deklarim import (*). Deklarimi n vazhdim na jep mundesin tu referohemi t gjitha klasave n java.util package pa qen nevoja q ti referohemi secils prej tyre.
Page 86 of 275
import java.uil.*; Klasat e java.lang package jan shum thelbsore pr t gjitha llojet e programeve sepse na krijojn mundsin ti prdorim pa shkruajtur ndonj kod, pra na lehtsojn punn gjat programimit. Megjithat sepse ato jan shum t prdorshme do klas n java.lang package automatikisht dhe pa krkuar ndonj deklarim import mund t prdori System dhe String.
8.2 Klasa Random Gjat programimit shpesh nevoitet gjenerimi i numrave, si psh loja me zare. Kjo mnyr sht e realizushme nprmjet klass Random, e cila sht pjes e klass java.util. Ne nuk po futemi n detaje se si kjo kryhet nga Java software por ne vetm do ta trajtojm at se si ta prdorim. Metoda nextInt mund t thrritet pa ndonj parametr, ose me nj int value. Kur prdoret pa parametr ajo gjeneron nj numr prgjat gjith int value, pra pozitive dhe negative. Por zakonisht ne na nevoiten vlera n kufi t caktuar, si psh n rastin e nj loje me zare ne duam vlera nga 1 n 6. Por metoda nextInt gjeneron numrat duke filluar nga 0 dhe deri minus 1 nga vlera e parametrit t caktuar nga programusi. Pr t shmangur kt anomali ne mund t shtojm apo t zbresim nj vler t caktuar sipas krkess. Pr t marr vlerat nga 1 n 6 ne mund t thrrasim nextInt(6), pra do t marrim vlerat nga 0 n 5 dhe i shtojm 1. Kodi n Programi 8. 1 prodhon numra n kufi t caktuar. Studjojeni me kujdes kodin dhe ndryshoni vlerat e tij pr t par vlerat e output. Ne po shpjegojm vetm rastet kur duam t gjenerojm vlera n kufit 1-6. Si e shihni dhe nga fjalia n vazhdim nextInt(6) do gjeneroj vlera ndrmjet 0 dhe 5 po duke i shtuar 1 do t gjeneroj vlera ndrmjet 1 dhe 6. num1 = gjeneron.nextInt(6) + 1; System.out.println ("Nga 1-6: " + num1); T njjtin rezultat na e jep dhe mnyra n vazhdim, ku nextFloat() gjeneron vlera ndrmjet 0 dhe 1 dhe duke u shumzuar me 6 do gjeneroj ndrmjet 0 dhe 6. N rreshtin e dyt t kodit ne po marrim vetm int value dhe po u shtojm 1. Pra rezultati do jet i njjt me kodin e msiprm. num2 = gjeneron.nextFloat() * 6; // 0.0 ne 5.999999 num1 = (int)num2 + 1; System.out.println ("Nga 1-6: " + num1);
public class GeneronNumrat { //----------------------------------------------------------------- // Gjeneron numrat ne kufi te caktuar. //----------------------------------------------------------------- public static void main (String[] args) { Random gjeneron = new Random(); int num1; float num2;
num2 = gjeneron.nextFloat() * 6; // 0.0 ne 5.999999 num1 = (int)num2 + 1; System.out.println ("Nga 1-6: " + num1); } } Output---------------------------------------------------------------------------------------- Nje integer: 170955027 Nga 0-9: 7 Nga 1-10: 7 Nga 1-6: 3 Nga -5-4: -5 Nje float nga 0-1: 0.691747 Nga 1-6: 2
Page 89 of 275
8.3 Klasa Math Klasa Math sht e prcaktuar n java.lang package, e cila ofron nj numr t math funksionesh pr t br llogaritje. Metodat n klasn Math kthejn vlera t cilat mund t prdoren n program sipas nevojs. N Programi 8. 2 prdoruesi ka t drejtn t zgjedhi koefientt pr formuln kuadratike dhe klasa Math kryen llogaritjet pr t gjetur rrnjt. Shikoni n vazhdim formuln pr zgjidhjet e ekuacionit. a ac b b rrenja 2 4 2
= Shikoni kodin n vazhdim se si zgjidhjet arrihen. Ne kemi krijuar nj variabl rrenjkatrore e cila na kthen n program numrin q korespondon brenda rrnjs. Vreni se si b sht ngritur n katror. N fjalin e dyt dhe t tret po kryejm llogaritjet pr rrenja1 dhe rrenja2. rrenjkatrore = Math.pow(b, 2) - (4 * a * c); rrenja1 = ((-1 * b) + Math.sqrt(rrenjkatrore)) / (2 * a); rrenja2 = ((-1 * b) - Math.sqrt(rrenjkatrore)) / (2 * a); Programi 8. 2 //******************************************************************** // Kuadratik.java Autor: Gjergji Shaska // // Perdorimi i klases Math per llogaritje. //********************************************************************
import java.util.Scanner;
public class Kuadratik { //----------------------------------------------------------------- // Percakton rrenjet e nje kuadratik equation.
Page 90 of 275
//----------------------------------------------------------------- public static void main (String[] args) { int a, b, c; // ax^2 + bx + c double rrenjkatrore, rrenja1, rrenja2;
Scanner scan = new Scanner (System.in);
System.out.print ("Fut koeficentin e x^2: "); a = scan.nextInt();
System.out.print ("Fut koeficent x: "); b = scan.nextInt();
System.out.print ("Fut konstanten: "); c = scan.nextInt();
Output---------------------------------------------------------------------------------------- Fut koeficentin e x^2: 2 Fut koeficent x: 4 Fut konstanten: -2 Rrenja #1: 0.41421356237309515 Rrenja #2: -2.414213562373095
8.4 Formatimi i output Klasat NumberFormat dhe DecimalFormat prdoren pr t formatuar informacionin n mnyr q ai t duket n menyrn e dshiruar kur printohet. T dyja kto klasa jan pjes e libraris standarte t Java software dhe prcaktohen n Java.text package. Dy jan metodat m t prdorshme n klasn NumberFormat: getCurrencyInstance dhe getPercentInstance. Metoda getCurrencyInstance prdoret pr formatimin e vlerave monetare, ndrsa metoda getPercentInstance prdoret pr nj objekt q formaton prqindjen. N Programi 8. 3 t dyja metodat prdoren pr t printuar mimin. Pasi prdoruesi fut numrin e copve dhe mimin pr do cop programi do t llogaris mimin total pa taks, taksn dhe mimin q paguan blersi me gjith taks. Pr t printuar prkatsisht vlern monetare dhe prqindjen t dyja metodat jan prdorur. Programi 8. 3 //******************************************************************** // Pazari.java Autor: Gjergji Shaska // // Perdorimi i klases NumberFormat. //********************************************************************
public class Pazari { //----------------------------------------------------------------- // Llogarit cmimin gjithsej pas taksave qe duhet te // paguaj bleresi. //----------------------------------------------------------------- public static void main (String[] args) { final double PERQINDJA_TAKS = 0.10; // 10% takse
int sasia; double totalpataks, taks, Cmimitotal, cmimicope;
// Printo me formatimin perkates System.out.println ("Cmimi total pa taks: " + fmt1.format(totalpataks)); System.out.println ("Taks: " + fmt1.format(taks) + " per " + fmt2.format(PERQINDJA_TAKS)); System.out.println ("Cmimi total: " + fmt1.format(Cmimitotal)); } } Output---------------------------------------------------------------------------------------- Fusni sasin: 5 Fusni cmimin per cope: 3 Cmimi total pa taks: $15.00 Taks: $1.50 per 10% Cmimi total: $16.50
8.5 Tipet Enumerated Nj klas enumerated sht nj tip special klase, e cila ofrohet nga Java. Fjala e rezervuar enum prdoret pr tju referuar tipeve enumerated. Pasi nj tip enumerated sht deklaruar, ajo mund t prdoret sa her nevoitet n program. Vlerat pr enumerated mund t jen t llojeve t ndryshme si: numra, shkronja, fjal etj. Shikoni nj tip enumerated n fjalin n vazhdim. enum Emrat {vlora, fieri, tirana}; Numri i vlerave n enum sht pa limit. Pasi enumerated sht deklaruar ne mund ti referohemi vetm vlerave t saj duke deklaruar nj variabl, e cila mund t marr vetm nj nga tre vlerat e deklaruara; vlora, fieri, tirana. Emrat qytetet Pas ksaj ne mund ti referohemi vlers vlora si n fjalin n vazhdim. qytetet = Emrat.vlora;
Page 94 of 275
Secila vler n tipet enumerated ruhet si integer, e cila referohet n radh. Pra vlora ka vlern 0, fieri ka vlern 1, tirana ka vlern 2 dhe kshtu me radh. Tipet enumerated jan tipe speciale t klasave, kshtu q ato n prgjithsi nuk deklarohen n nj metod, ato deklarohen n nivelin e klass. N Programi 8. 4 UV sht enum me vlera emai, llogaria, regjistrimi. Vreni se si variablat e student1, student2 dhe student3 i referohen enum dhe pr ta kuptuar m mir kt ne po printojm vlerat dhe emrin pr seciln variabl. Programi 8. 4 //******************************************************************** // Universiteti.java Autor: Gjergji Shaska // // Perdorimi i tipit enumerated. //********************************************************************
public class Universiteti { enum UV {email, llogaria, regjistrim}
//----------------------------------------------------------------- // Creates and uses variables of the Flavor type. //----------------------------------------------------------------- public static void main (String[] args) { UV student1, student2, student3; student1 = UV.llogaria; System.out.println ("student1 vlera: " + student1); System.out.println ("student1 pozicioni: " + student1.ordinal()); System.out.println ("student1 emri: " + student1.name());
8.1 Kush sht efekti i nj fjalie n vazhdim? import java.awt.*; 8.2 Trego kufit e rezultateve pr seciln nga shprehjet n vazhdim. a) generator.nextInt(10); b) generator.nextInt(9) + 1; c) generator.nextInt(10) - 5; 8.3 Shkruaj nj fjali e llogarit rrnjn katrore t x dhe y dhe e ruan rezultatin n z.
Page 97 of 275
Kapitulli 9
T SHKRUASH KODIN E KLASAVE
N kapitullin 8 ne prdorm klasat dhe objektet n situata t ndryshme n program, ndrsa n kt kapitull ne do t shkruajm kodin pr klasat duke prcaktuar objektet tan. N kt kapitull ne do msojm gjithashtu encapsulation e cila na mson mnyrn m t mir t t shkruarit t programit q t jet sa m i sigurt.
9.1 Anatomia e Klass Deri tani programet tona megjithse kan qen t plota dhe kan zgjidhur nj problem t caktuar ato t gjitha kan qen t prbra nga nj klas e vetme dhe n prgjithsi me nj metod t vetme. Le ta shpjegojm me nj shembull se si dy klasa mund t prdoren n t njjtin projekt. Si dhe do ta shohim dhe n programe t tjera t mvonshme ne do t prdorim dhe m shum se dy klasa n t njjtin projekt, por ideja e lidhjeve ndrmjet tyre sht e njjt. Ndryshimi ndrmjet ktij programi dhe programeve t mparshme sht se ktu ne po e shruajm vet klasn e dyt ndrsa n programet e deri tanishme ne kemi prdorur vetm klasa q na i ofronte libraria e Javs. N Programi 9. 1 sht i njjti kode q ne kemi shkruar dhe n programet e mparshme, pra klasa kryesore me nj metod t vetme. Ne do t vazhdojm dhe n t ardhmen me t njjtn ide pr klasn kryesore, pra do t jet klasa ku do t startoj programi. Ndrsa Programi 9. 2, q si tham dhe m sipr nuk sht n librarin e Javs, por ne vet duhet ta shkruajm at.
Page 98 of 275
Klasa Zare n Programi 9. 2 ka dy tipe data: nj integer konstant (MAKS) q paraqet maksimumin e faqeve t zarit, dhe nj integer variable (vleraFaqe) q paraqet faqen e zarit n at moment. Jan prdorur katr metoda n kt klas: rotullon, vevleraFaqe, mervleraFaqe dhe toString. Nse do t shihni me kujdes ne po prdorim gjithashtu nj metod speciale t quajtur cunstructors, e cila si e shihni ka t njjtin emr me emrin e klass. Kjo metod sht prdorur pr t startuar vleraFaqe n nj vler t caktuar, n rastin ton sht 1. Prej tani dhe n vazhdim ne do t prdorim gjersisht cunstructors dhe do t shohim se si ato prdoren pr t iniciuar vlera t ndryshme. Metoda rotullon duke u bazuar n Math.random() q ne e kemi shpjeguar n kapitujt e kaluar, gjeneron numrat dhe kthen vlern n metodn q e thrret. Ne mund t marrim kt vler gjithashtu n do koh q na nevoitet duke prdorur metodn mervleraFaqe, ndrsa metoda vleraFaqe vendos vlern e faqes s zarit n nj vler t specifikuar.
Programi 9. 1 //******************************************************************** // RrotullonZaret.java Autor: Gjergji Shaska // // Perdorimi i disa klasave //********************************************************************
public class RrotullonZaret { //----------------------------------------------------------------- // Krijon dy objekte qe rrotullohen disa here. //----------------------------------------------------------------- public static void main (String[] args) {
Page 99 of 275
Zare zar1, zar2; // Zare eshte klasa Zare int shuma;
Shuma: 6 Zari pare: 1, Zari dyte: 4 Shuma e re: 5 Programi 9. 2 //******************************************************************** // Zare.java Autor: Gjergji Shaska // // Prezanton nje zar me faqe qe tregojn vlerat ndermjet 1 dhe 6 //********************************************************************
public class Zare { private final int MAKS = 6; // maksimumi faqeve
private int vleraFaqe; // vlera qe tregohet ne zare
//----------------------------------------------------------------- // Constructor: vendos vleren fillestare. //----------------------------------------------------------------- public Zare() { vleraFaqe = 1; }
//----------------------------------------------------------------- // Rrotullon zarin dhe kethen rezultatin. //-----------------------------------------------------------------
Page 101 of 275
public int rotullon() { vleraFaqe = (int)(Math.random() * MAKS) + 1;
return vleraFaqe; }
//----------------------------------------------------------------- // Vendos vleren e faqes te zarit ne vleren specifike. //----------------------------------------------------------------- public void veVleraFaqe (int vlera) { vleraFaqe = vlera; }
//----------------------------------------------------------------- // Kthen vleren e faqes se zarit. //----------------------------------------------------------------- public int merVleraFaqe() { return vleraFaqe; }
//----------------------------------------------------------------- // Kthen nje string qe prezanton kete zar. //-----------------------------------------------------------------
Page 102 of 275
public String toString() { String rezultati = Integer.toString(vleraFaqe);
return rezultati; } } Vini re n klasn Zare, konstantja MAKS dhe variabla vleraFaqe jan deklaruar brenda klass por jasht metodave. Kjo bn t mundur q ktyre variablave mund tu referohen t gjitha metodat n kt klas.
9.2 Encapsulation Nj objekt duhet t jet i udhhequr nga vetja e tij, q do t thot q vlerat e ktij objekti mund t modifikohen vetm nga ky objekt. Vetm metoda e klass Zare sht prgjegjse pr t ndryshuar vlerat e variabls vleraFaqe. Ne duhet ta bjm at t pamundur pr tu ndryshuar jasht klass Zare. Encapsulation sht mnyra e cila data nuk mund t ndryshohet n mnyr direkte nga nj pjes tjetr e kodit. Le ti referohemi metods kryesore n klasn RrotullonZaret dhe vreni se si programi thrret metodn rotullon pr objektin zar. Metoda kryesore nuk mund ti referohet variabls vleraFaqe direkt. Disa modifikus n Java quhen visibility sepse ato kontrollojn akseset e pjestarve t klass. Fjalt e rezervuara public, private dhe protected jan modifikus visibiliy q mund t aplikohen n variablat dhe metodat e nj klase. Nse nj variabl sht deklaruar public ather vlerat e saj mund t ndryshohen dhe jasht ksaj klase, pra veorit e encapsulation nuk ruhen. Ndrsa nse sht deklaruar private vetm brenda ksaj klase ne kemi akses tek kjo variabl. I vetmi qllim kur prdoret private sht q ajo t ndimoj metodat brenda ksaj klase pr t kryer funksionet e tyre. Mnyra tjetr protected sht disi n mes t t dyjave, e cila lejon disa nga veorit e encapsulation. Le ta mbyllim kt kapitull me nj program q pothujse prmbledh far ne kemi thn m sipr por dhe disa koncepte q ne nuk i kemi shpjegur n detaje. Klasa Transaksion n Programi 9. 3 ka nj metod kryesore q krijon disa llogari bankare
Page 103 of 275
duke prfshir dhe shrbimet e tyre. N tre fjalit e para ne po fusim t dhnat pr tre klient t banks si jan emri, numri i llogaris dhe sasia e parave. Klasa Llogaria n Programi 9. 4 tregon n t vrtet se si kryhen llogaritjet n llogarin bankare. Si e vini re constroctor n kt klas ka tre parametra n ndryshim me constroctor q ne kemi prdorur m par ku kemi prdorur vtm nj parametr. Megjithat ideja sht e njjt, ato prdoren pr t startuar data. Metoda deposit prdoret pr t depozituar sasin e parave n variabln balance dhe t kthej vlern e saj prsri n program. Metoda terheq prdoret pr t llogaritur sasin e parave q do t ngelen n variabln balance pasi kemi zbritur sasin e parave q prdorusi trheq nga llogaria e tij bankare dhe taksn e banks. M pas kjo variabl sht kthyer prsri n program. Metoda shtoInteresin prdoret pr t llogartitur sasin e parave pasi interesi sht llogaritur sipas formuls q ju e shihni brenda ksaj metode dhe vlera e variabls balance kthehet n program. Metoda merrBalance prdoret pr t marr vlern e variabls balance dhe pr ta kthyer at n mnyr q t prdoret n klasn Transaksion. N metodn toString po prdorim NumberFormat pr t formatur vlerat monetare dhe po kthejm vlern n formn si paraqitet n rreshtin e fundit. Programi 9. 3 //**************************************************************** **** // Transaksion.java Autor: Gjergji Shaska // // Demostron krijimin dhe perdorimin e disa llogarive bankare. //**************************************************************** ****
public class Transaksion { //----------------------------------------------------------------- // Krijon disa llogari bankare dhe kerkon disa sherbime. //----------------------------------------------------------------- public static void main (String[] args) {
Page 104 of 275
Llogaria klient1 = new Llogaria ("Kastriot Shaska", 56347, 580.39); Llogaria klient2 = new Llogaria ("Gjergji Shaska", 87432, 65.25); Llogaria klient3 = new Llogaria ("Tanush Shaska", 64375, 361.86);
klient1.deposit (21.32);
double gjergjiBalance = klient2.deposit (200.00); System.out.println ("Llogaria e Gjergjit pas depozites: " + gjergjiBalance);
System.out.println ("Llogaria e Gjergjit pas terheqjes: " + klient2.terheq (130.75, 1.00));
public class Llogaria { private final double PERQINDJA = 0.065; // perqindja interesit 6.5%
private long vepNum; private double balance; private String emri;
//----------------------------------------------------------------- // Vendos llogarin duke percaktuar zoterusin, numrin e llogaris, // dhe balancen fillestare. //----------------------------------------------------------------- public Llogaria (String zoterusi, long llogaria, double fillestare) { emri = zoterusi;
Page 106 of 275
vepNum = llogaria; balance = fillestare; }
//----------------------------------------------------------------- // Depoziton sasin specifike ne llogari dhe kthen balancen e re. //----------------------------------------------------------------- public double deposit (double sasia) { balance = balance + sasia;
return balance; }
//----------------------------------------------------------------- // Terheq sasin e kerkuar dhe kthen balancen e re. //----------------------------------------------------------------- public double terheq (double sasia, double taks) { balance = balance - sasia - taks;
return balance; }
//----------------------------------------------------------------- // Shton interesin ne llogari dhe kthen balancen e re. //-----------------------------------------------------------------
//----------------------------------------------------------------- // Kthen balancen e llogaris. //----------------------------------------------------------------- public double merrBalance () { return balance; }
//----------------------------------------------------------------- // Kthen pershkrimin e llogaris si nje string. //----------------------------------------------------------------- public String toString () { NumberFormat fmt = NumberFormat.getCurrencyInstance();
9.1 Prcakto pr seciln nga fjalit n vazhdim kush prezanton nj klas dhe kush prezanton nj objekt pr at klas. a) Vlora, Flamurtari b) Universitet, Student c) 28 Nntori, Fest 9.2 Kush jan dallimet ndrmjet deklarimeve public, private dhe protected. far bn fjalia return n nj program?
Page 109 of 275
PROJEKTI 1 **************************************************************** N programin n vazhdim ne po japim t pfunduar kodin n t dyja klasat pr t prcaktuar kohn. Ju duhet ta ndryshoni at n mnyr t till q t plotsohen krkesat e mposhtme: ndryshoni kodin n mnyr q output t jet n shqip dhe fjalia e par t jet emri dhe mbiemri juaj, emrat e klasave duhet t jen Koha dhe Stimulus, tipet e kohs duhet t jen: shi,breshr, bor, diell, mjegull, stuhi, vap dhe vetm emri juaj, jo mbiemri. Ndryshoni variablat pr kodin int inside, condition, choice; n brenda, kushti dhe zgjedhje dhe pr Simulator autoset, rnd; ndrysho n vendos dhe mundesi. Ju duhet t ktheni pr korigjim: kodin e printuar pr t dyja klasat dhe outputin e printuar ku programi t jet testuar me t gjitha mundsit; 1, 2, 3 dhe zgjith dhe nj numr m t math se tre.
Kodi projekt 1. 1 //******************************************************************** // Weather.java Autor: Gjergji Shaska // Projekti 1. //********************************************************************
import java.util.Scanner;
public class Weather {
public static void main (String[] args) { int inside, condition, choice;
Simulator autoset, rnd;
Page 110 of 275
Scanner scan = new Scanner (System.in); autoset = new Simulator(); rnd = new Simulator();
autoset.simulate();
System.out.println("The current weather is: Sun"); System.out.println ("---------------------------"); autoset.setFaceValue(3);
inside = 0; // Sets inside to 0 to enter the while loop
while (inside == 0) { System.out.println ("Would you like to select the weather or let the Simulator?"); System.out.println (); System.out.println ("You selection options are:"); System.out.println (" 1 - to set Weather"); System.out.println (" 2 - to let Simulator"); System.out.println (" 3 - to display current Weather"); System.out.print ("Please select one of the above choices: "); choice = scan.nextInt(); ++inside;
if (choice > 3) System.out.print ("You have selected an incorrect option please try again"); System.out.println ();
Page 111 of 275
inside = 0;
if (choice == 1) { System.out.println ("Type the weather number you would like. Your choices are:"); System.out.println (); System.out.println (" 1 - for Rain"); System.out.println (" 2 - for Snow"); System.out.println (" 3 - for Sun"); System.out.println (" 4 - for Wind"); System.out.println (" 5 - for Hail"); System.out.println ();
System.out.print ("Select your Weather: "); condition = scan.nextInt();
if (condition == 1) { System.out.println ("You have set the weather to: Rain "); System.out.println ("----------------------------------"); } if (condition == 2) { System.out.println ("You have set the weather to: Snow "); System.out.println ("----------------------------------"); } if (condition == 3)
Page 112 of 275
{ System.out.println ("You have set the weather to: Sun "); System.out.println ("---------------------------------"); } if (condition == 4) { System.out.println ("You have set the weather to: Wind "); System.out.println ("----------------------------------"); } if (condition == 5) { System.out.println ("You have set the weather to: Hail "); System.out.println ("----------------------------------"); }
if (rnd.faceValue == 1) { System.out.println ("The Simulator has set the weather to: Rain");
Page 113 of 275
System.out.println ("------------------------------------------"); } if (rnd.faceValue == 2) { System.out.println ("The Simulator has set the weather to: Snow"); System.out.println ("------------------------------------------"); } if (rnd.faceValue == 3) { System.out.println ("The Simulator has set the weather to: Sun"); System.out.println ("------------------------------------------"); } if (rnd.faceValue == 4) { System.out.println ("The Simulator has set the weather to: Wind"); System.out.println ("------------------------------------------"); } if (rnd.faceValue == 5) { System.out.println ("The Simulator has set the weather to: Hail"); System.out.println ("------------------------------------------"); }
if (autoset.faceValue == 1) { System.out.println ("The current weather is: Rain"); System.out.println ("----------------------------"); } if (autoset.faceValue == 2) { System.out.println ("The current weather is: Snow"); System.out.println ("----------------------------"); } if (autoset.faceValue == 3) { System.out.println ("The current weather is: Sun"); System.out.println ("----------------------------"); } if (autoset.faceValue == 4) { System.out.println ("The current weather is: Wind"); System.out.println ("----------------------------"); } if (autoset.faceValue == 5)
Page 115 of 275
{ System.out.println ("The current weather is: Hail"); System.out.println ("----------------------------"); }
System.out.println (); inside = 0; }
} } }
Kodi projekt 1. 2 //******************************************************************** // Simulator.java Autor: Gjergji Shaska // Projekti 1. //********************************************************************
public class Simulator { private final int MAX = 5; // maximum weather types public int faceValue;
public Simulator()
{
Page 116 of 275
faceValue = 1; }
//----------------------------------------------------------------- // Selects a random number between 1 to 5 and returns the result. //----------------------------------------------------------------- public int simulate() { faceValue = (int)(Math.random() * MAX) + 1;
return faceValue; }
public void setFaceValue (int value) { faceValue = value; }
public int getFaceValue() { return faceValue; }
public String toString() {
Page 117 of 275
String result = Integer.toString(faceValue);
return result; }
}
Page 118 of 275
Kapitulli 10
GRAPHICS DHE APPLETS
N kt kapitull ne do t japim disa nga konceptet e grafikve q luajn nj rol t rndsishm n kompiutera. Ne do t tregojm se si t ndryshojm ngjyrat dhe t vizatojm figura t ndryshme. N vazhdim t ktij kapitulli do t shpjegojm dy mnyrat e Java programs: Java applets dhe Java applications.
10.1 Graphics Data grafike paraqiten duke e ndar at n pjes t vogla t quajtura pixels. Ideja ktu sht e njjt me far ne kemi thn pr do lloj informacioni, ai ndahet n pjes t vogla dhe paraqitet n kompiuter me numra sipas vlerave q ruhet. Pra nj piktur ndahet n pjes t vogla t quajtura pixels dhe secila prej tyre paraqitet me nj numr. Sa m i madh t jet numri i pixels aq m e qart do t jet piktura. Pr paraqitjen e nj pikture bardh dhe zi ideja sht fare e qart, duhet q secila pixels ti jepet nj vler 0 pr ngjyrn e bardh dhe 1 pr ngjyrn e zez. Kodi n vazhdim sht prdorur vetm pr t treguar se si kjo arrihet n nj program t vrtet por mos u mundoni t kuptoni kodin pasi ne kemi prdorur FPGA pr t realizuar at dhe kjo nuk i prket ksaj klase. Ky sht nj kod i shkruajtur pr realizimin e nj videogami i cili paraqet nj loj me nj brekock e cila mundohet t kaloj nj autostrad me pes ndarje pr makina. Nse prdoruesi duke e lvizur brekockn majtas, djathtas, lart, posht arrin q ajo t
Page 119 of 275
kaloj, ai sht fitus, nse makina e godet brekockn ai sht humbs. N Fig. 10. 1 jepet nj piktur e ktij programi kur ai sht duke punuar.
Fig. 10. 1 Programi I lojs me brekockn q mundohet t kaloj autostradn. Prqndrohuni n kodin n vazhdim vetm tek mnyra se si harrihet t ndrtohet nj makin vetm duke shkruajtur 0 dhe 1. N kodin n vazhdim ne kemi dhn kodin vetm pr nj makin por si e kuptoni dhe nga figura e msiprme ne kemi katr kode t njjta ku ndryshimi i pozicioneve t 0 dhe 1 paraqet format e ndryshme pr makinat. Vreni me kujdes pjesn e kodit q sht e mbushur me 0 dhe 1 ku ju mund ta dalloni formn e makins. Mos u ngatrroni me ngjyrat q ato duken n pikturn e msiprme pasi ky kod ka dhe shum pjes t tjera ku ne ndryshojm dhe ngjyrat. Gjithashtu menjher pas ktij kodi po japim dhe kodin pr brekockn, verejeni dhe at me kujdes dhe dalloni formn e saj. Kodi i nj prej makinave library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all;
entity Prom5 is Port (
Page 120 of 275
addr5: in STD_LOGIC_VECTOR (5 downto 0); M5: out STD_LOGIC_VECTOR (0 to 49) ); end Prom5;
architecture Prom_arch5 of Prom5 is type rom_array5 is array (NATURAL range <>) of STD_LOGIC_VECTOR (49 downto 0);
begin process(addr6) variable j: integer; begin j := conv_integer(addr6); M6 <= rom6(j); end process; end Prom_arch6;
Page 126 of 275
do kompiuter dhe gjuh programimi ka t prcaktuar nj sistem kordinativ. Ky sistem kordinativ q prdoret n Java sht i njjt me at q ne njohim deri tani, prve se ai nuk ka vlera negative por vlerat e tij jan gjithmon pozitive dhe origjina ndodhet n krahun e majt lart t pikturs n Java. Imagjinojeni me ekranin e kompiuterit, n krahun e majt lart sht origjina (0,0), nse ecim djathtas boshti x rritet dhe nse ecim posht boshti y rritet. do ngjyr n Java mund t prezantohet n marrdhnie me tri nngjyrat baz: red, green dhe blue (RGB). Secili numr pr RGB prezanton kontributin e ngjyrave, duke dhn nga nj byte pr secilin numr, pra n kufijt nga 0 n 255. N Fig. 10. 2 po japim vlerat q korespondojn pr seciln ngjyr, kto n Java jan t prcaktuara n klasn Color e cila sht pjes e java.awt package. Ngjyra Objekti Vlerar RGB black Color.black 0,0,0 blue Color.blue 0,0,255 gray Color.gray 128,128,128 green Color.green 0,255,0 magenta Color.magenta 255,0,255 orange Color.orange 255,200,0 pink Color.pink 255,175,175 red Color.red 255,0,0 white Color.white 255,255,255 yellow Color.yellow 255,255,0 Fig. 10. 2 Vlerat e ngjyrave n klasn Color.
10.2 Applets Applets jan programe Java q prdoren gjersisht n network dhe Web browser. Shikoni Programi 10. 1 se si prdor n fillim t klass fjalin import javax.swing.JApplet e cila tregon se klasa JApplet sht pjes e javax.swing package. E vetmja e re n kt program sht vlerat pr sistemin kordinativ. Provoni t lvizni vlerat pr pixels dhe vreni n output se si do t zhvendosen figurat. Programi 10. 1 //******************************************************************** // Pikture.java Autor: Gjergji Shaska //
Page 127 of 275
// Perdorimi i appleteve baze. //********************************************************************
import javax.swing.JApplet; import java.awt.*;
public class Pikture extends JApplet { //----------------------------------------------------------------- // Pikturo nje thenie. //----------------------------------------------------------------- public void paint (Graphics page) { page.drawRect (70, 70, 60, 60); // katror page.drawRect (80, 100, 245, 50); // drejtkendesh page.drawOval (95, 75, 40, 40); // rreth page.drawLine (55, 80, 120, 140); // vije
page.drawString ("Universiteti Ismail Qemali", 150, 120); page.drawString ("Vlore, Albania", 150, 140); } } Shikoni outputin pr kt program n Fig. 10. 3. Klasa graphics sht prcaktuar n java.awt package. Si e shihni ne e prdorm at n programin e msiprm ku ajo ka funksionet pr t vizatuar katror, drejtkndsh, rreth dhe vij. Metodat e klasave grafike na lejojn ne t zgjedhim
Page 128 of 275
se si e duam pikturn t mbushur apo jo, e thn me fjal t tjera jotransparente dhe transparente. Fig. 10. 3 Outputi pr Programi 10. 1
Le ti ilustrojm far tham m lart me nj shembull konkret. N Programi 10. 2 ne shkruajtm nj kod pr t paraqitur nj njeri prej bore. Me sistemin kordinativ ju duhet t jeni t ambjentuar tani e vetmja e re n kt program sht se si pjes t veanta t tij duke prdorur fjaln fill bhen solide dhe jo transparente. Programi 10. 2 //******************************************************************** // NjeriBore.java Autor: Gjergji Shaska // // Perdorimi i metodave per te vizatuar. //********************************************************************
import javax.swing.JApplet; import java.awt.*;
public class NjeriBore extends JApplet { //-----------------------------------------------------------------
Page 129 of 275
// Vizato nje njeri prej bore. //----------------------------------------------------------------- public void paint (Graphics page) { final int MES = 150; final int KOK = 50;
10.1 far sht nj pixels? 10.2 Ku gjendet origjina e sistemit kordinativ dhe si jan orientuar boshtet kordinative? 10.3 Shpresoni se you keni nj objekt grafik t quajtur faqe, shkruani nj fjali q do t vizatoj nj vij nga pika (15,35) n pikn (65,70). 10.4 Shpresoni se you keni nj objekt grafik t quajtur faqe, shkruani nj fjali q do t vizatoj nj drejtkndsh me lartsi 50 dhe gjersi 30, ku pika e krahut t majt sipr sht n pikn (5,10).
Page 132 of 275
Kapitulli 11
KOMPONENTT DHE KONTENIERT
N kt kapitull do t shpjegojm graphical user interfaces (GUI) dhe do t vazhdojm me frames dhe panels. Gjithashtu do t kthehemi tek package ku do t shpjegojm dy paketat e klasave GUI dhe do t japim komponentt GUI.
11.1 Graphical User Interfaces GUI Nj komponent GUI sht nj objekt q prezanton nj element n ekran q prdoret pr t paraqitur informacione ose i lejon prdoruesit t komunikoj me programin. Komponentt GUI prfshijn: labels, buttons, text fields, scroll bars dhe menus. Klasat n GUI jan t prcaktuara n dy paketa: java.awt dhe javax.swing. Ne prdorm java.awt n kapitullin e kaluar ku ne duhet t theksojm se kjo sht paketa origjinale n Java, n t ciln gjenden klasa Color apo Draw t njohura tashm pr ju. Nj version i cili sht shtuar m von sht javax.swing (vini re x), e cila prmban m shum komponent q ne na nevoiten gjat programimit. Nj kontainer sht nj tip special komponenti q prdoret pr t mbajtur dhe organizuar komponent t tjer. Frames dhe panels jan dy shembuj t kontenierve n Java.
11.2 Frames dhe Panels Nj frame sht nj kontenier q prdoret pr t paraqitur nj aplikim n GUI Java, i cili paraqitet n nj window mnjan me emrin e tij. N krahun e djatht
Page 133 of 275
sipr ndodhen tre butona t vegjl t cilt na japin mundsin pr t zvogluar, zmadhuar dhe mbyllur at. Nj frame prcaktohet nga klasa JFrame. Panel sht gjithashtu nj kontenier i cili nuk mund t shfaqet n nj window mnjan, por ai duhet t shtohet te nj kontenier tjetr q t shfaqet. Funksioni kryesor i tij sht t ndimoj n organizimin e komponentve t tjer dhe ai prcaktohet n klasn JPanel. Pr t paraqitur nj tekst apo imazh n GUI prdoret nj label e prcaktuar n klasn JLabel, ku pa ekzagjerim mund t themi se ato gjenden pothuajse n do GUI program. Pr t kuptuar m mir far ne tham m lart le t vazhdojm me nj program ku JFrame, JPanel dhe JLabel prdoren. Programi 11. 1 fillon duke importuar dy paketat q i shpjeguam n fillim t ktij kapitulli. M pas JFrame merr nj string si parametr, pra fjaln Flamurtari. Metoda frame.setDefaultCloseOperation prcakton far do t ndodhi kur t klikohet (x) n krye t ans s djatht, pra t mbyllet frame. Zakonisht prdoret EXIT_ON_CLOSE e cila l butonin (x) ta prfundoj programin. Nj panel krijohet duke e filluar at n klasn JFrame. M posht n kod prcaktohen ngjyra e bekgraundit dhe dimesionet pr frame. Shpesh ne do t prdorim pr t caktuar dimensionet e frame setMaximumSize dhe setMinimumSize. Labels fillimisht jan krijuar dhe pastaj teksti kalohet n t. N kt program ne po prdorim tre label por n t njjtn mnyr mund t prdorim sa label t na nevoiten. Konteniert kan nj add metod q lejon konteniert e tjer t shtohen tek ta. Tregoni kujdes kur krijoni kontenier q dhe ti shtoni ata m pas nse ju vetm i krijoni por nuk i shtoni, programi compilet pa gabime por label nuk shfaqet. Pasi label jan shtuar prdoret metoda getContentPane e cila menjher thrret metodn pr t shtuar label. Metoda e fundit e kodid frame.setvisible bn t mundur q frame t shfaqet n ekran.
// Perdorimi i frames, panels dhe labels. //**************************************************************** ****
import java.awt.*; import javax.swing.*;
public class Flamurtari { //----------------------------------------------------------------- // Trego nje fjali. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Flamurtari");
JPanel fillimisht = new JPanel(); fillimisht.setBackground (Color.green); fillimisht.setPreferredSize (new Dimension(350, 100));
JLabel label1 = new JLabel ("Kush eshte Flamurtari?"); JLabel label2 = new JLabel ("Flamurtari eshte ekipi i futbollit" + " te qytit te Vlores."); JLabel label3 = new JLabel ("Flamurtari eshte krenaria e qytetit.");
11.3 Nested Panels Le t shohim tani nj tjetr program ku do t prdorim nested panels. Shikoni n Programi 11. 2 nestedpanels krijojn katr subpanels, secili ka nga nj label q tregon emrin Vlora. Pr secilin nga subpanels kemi vendosur dimensionet dhe ngjyrn.
public class NestedPanels { //----------------------------------------------------------------- // Prezantor tre panel nested ne nje te katert. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Bluza Flamurtarit"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
// subpanel 1 JPanel subPanel1 = new JPanel(); subPanel1.setPreferredSize (new Dimension(50, 250)); subPanel1.setBackground (Color.red); JLabel label1 = new JLabel ("V");
Page 137 of 275
subPanel1.add (label1);
// subpanel 2 JPanel subPanel2 = new JPanel(); subPanel2.setPreferredSize (new Dimension(50, 250)); subPanel2.setBackground (Color.blue); JLabel label2 = new JLabel ("L"); subPanel2.add (label2);
// subpanel 3 JPanel subPanel3 = new JPanel(); subPanel3.setPreferredSize (new Dimension(50, 250)); subPanel3.setBackground (Color.red); JLabel label3 = new JLabel ("O"); subPanel3.add (label3);
// subpanel 4 JPanel subPanel4 = new JPanel(); subPanel4.setPreferredSize (new Dimension(50, 250)); subPanel4.setBackground (Color.blue); JLabel label4 = new JLabel ("R"); subPanel4.add (label4);
// Set up primary panel JPanel primary = new JPanel();
11.1 Shpjego konceptin e kontenierit, frame dhe t operatorit new? 11.2 Shkruj nj deklarim pr nj enumerated q prezanton ditt e javs.
Page 140 of 275
Kapitulli 12
OBJEKTET GRAFIKE
Ky kapitull do t shpjegoj disa objekte q kan prezantime grafike, q nnkupton se si objekti duket vizual. Nj objekt grafik mund t prmbaj data rreth dimensioneve dhe ngjyrave dhe gjithashtu mund t prmbaj metoda pr ta vizatuar at. N kt kapitull ne do t shpjegojm n detaje se si t prcaktojm nj objekt i cili ka karakteristika grafike. Ky kapitull do t vazhdoj me shfaqen e butonave n nj frame dhe me nj tjetr komponent, text fild, i cili i lejon prdoruesit t fusi n program data dhe t marri output. N kt kapitull do t prdorim dy klasa n t njjtin program dhe n kapitujt n vazhdim dy dhe m shum klasa do jen t pranishme gjith kohs.
12.1 Prdorimi i Klasave t Ndara Programi 12. 1 tregon metodn kryesore e cila ssht gj tjetr vese e njjta klase si dhe kemi prdorur m par. Si output pr kt program do t marrim nj fytyr t qeshur dhe nj tekst pr Spunch Bob. Programi 12. 2 do t prcaktoj t gjitha dimensionet pr t shfaqur kokn e Spunch Bobit duke prcaktuar: kokn, vesht, syt, bebet e syrit, vetullat, hundn dhe gojn. do pjes e programit tashm sht e njohur pr ju dhe nse sht nevoja referohuni tek kapitulli 10 ku ne treguam mnyrat e ndryshme t vizatimit. Dy konstantet e prdorura n program jan prdorur pr t caktua qendrn n t ciln vizatimi bazohet. Si dhe ju e shihni n program pjest e ndryshme t vizatimit jan bazuar n kt pik, duke shtuar apo zbritur. M pas programi vazhdon me nj constructor e cila nuk bn gj tjetr por vetm sa vendos ngjyrn, dimensionet dhe tipin e fontit pr kt panel.
Page 141 of 275
Vini re fjalin public class FytyreQeshur extends Jpanel e prdorur n Programi 12. 2. N detaje ne do ta shpjegojm at n kapitujt e mvonshm kur t flasim pr klasat prindr dhe fmij. Ajo far ne mund t themi tani sht se FytyreQeshur sht nj JPanel, q do t thot se ajo ka akses n klasn JPanel. Metoda paintComponent pranon nj objekt grafik si parametr. do objekt Jpanel ka nj metod paintComponent e cila automatikisht thrritet t vizatoj panelin. N rreshtin e par t metods paintComponent t ciln gjithashtu do ta shpjegojm ne detaje m von, prdoret super.paintComponent e cila prdoret gjithmon kur kemi klasat prindr dhe fmij.
Programi 12. 1 //**************************************************************** **** // Buzeqesh.java Autor: Gjergji Shaska // // Demostrimi i klasave te ndara. //**************************************************************** ****
import javax.swing.JFrame;
public class Buzeqesh { //----------------------------------------------------------------- // Klasa kryesore e programit. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Fytyre e qeshur"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Page 142 of 275
FytyreQeshur panel = new FytyreQeshur();
frame.getContentPane().add(panel);
frame.pack(); frame.setVisible(true); } }
Programi 12. 2 //******************************************************************** // FytyreQeshur.java Autor: Gjergji Shaska // // Demostrimi i klasave te ndara. //********************************************************************
import javax.swing.JPanel; import java.awt.*;
public class FytyreQeshur extends JPanel { // permasat e qendres se kokes private final int QENDRAX = 120, QENDRAY = 60; //----------------------------------------------------------------- // Constructor: Vendos karakteret kryesore te panelit. //-----------------------------------------------------------------
Page 143 of 275
public FytyreQeshur () { setBackground (Color.red); setPreferredSize (new Dimension(320, 200)); setFont (new Font("Courier", Font.BOLD, 16)); }
Po japim dhe nj tjetr shembull ku kemi prdorur tre klasa t ndara nga njra- tjetra. Programi 12. 3 ka metodn kryesore e cila krijon dhe shfaq frame, n t ciln shfaqen disa rrath t mbushur. E veanta n kt program sht se si realizohet vizatimi i ktyre rrathve, pra do rreth i vizatuar n kt program paraqitet me nj objekt t tijin. Metoda kryesore fillon nj objekt PrezantonRrathpanel dhe e shton at n frame. PrezantonRrathpanel tregohet n
Page 145 of 275
Programi 12. 4, e cila sht derivuar nga JPanel. Ajo prmban dhe starton data pr pes objekte rrathsh, vlerat e t cilave jan nisur fillimisht n nj constuctor. Metoda paintComponent n klasn PrezantonRrathpanel vizaton panelin duke thirrur metodn vizato pr secilin rreth, q do t thot se klasa PrezantonRrathpanel i krkon secilit rreth t vizatoj veten e tij. Programi 12. 5 prcakton vlerat pr t ruajtur dimensionet e rrethit, pozicionin (x,y) dhe ngjyrn. Provojeni progaramin dhe vereni output.
public class PrezantonRrath { //----------------------------------------------------------------- // Prezanton disa rrathe. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Prezanton Rrath"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
public class PrezantonRrathPanel extends JPanel { private Rrathe rreth1, rreth2, rreth3, rreth4, rreth5;
//----------------------------------------------------------------- // Constructor: Krijon pese objekte rrathe. //----------------------------------------------------------------- public PrezantonRrathPanel() { rreth1 = new Rrathe (50, Color.cyan, 60, 30); rreth2 = new Rrathe (45, Color.green, 40, 25); rreth3 = new Rrathe (90, Color.red, 65, 75); rreth4 = new Rrathe (45, Color.blue, 165, 35); rreth5 = new Rrathe (50, Color.yellow, 190, 65);
setPreferredSize (new Dimension(300, 200)); setBackground (Color.orange); }
//----------------------------------------------------------------- // Vizaton kete panel qe secili rreth vizaton vetveten. //----------------------------------------------------------------- public void paintComponent (Graphics page) { super.paintComponent(page);
public class Rrathe { private int diameteri, x, y; private Color ngjyra;
//----------------------------------------------------------------- // Constructor: Vendos vlerat e ketij rrethi. //----------------------------------------------------------------- public Rrathe (int dimensionet, Color dritHije, int upperX, int upperY) { diameteri = dimensionet;
Page 149 of 275
ngjyra = dritHije; x = upperX; y = upperY; }
//----------------------------------------------------------------- // Vizato kete rreth. //----------------------------------------------------------------- public void vizato (Graphics page) { page.setColor (ngjyra); page.fillOval (x, y, diameteri, diameteri); }
//----------------------------------------------------------------- // Ngjyrat. //----------------------------------------------------------------- public void setColor (Color dritHije) {
Page 150 of 275
ngjyra = dritHije; }
//----------------------------------------------------------------- // X. //----------------------------------------------------------------- public void setX (int upperX) { x = upperX; }
//----------------------------------------------------------------- // Y. //----------------------------------------------------------------- public void setY (int upperY) { y = upperY; }
//----------------------------------------------------------------- // Diameter accessor. //----------------------------------------------------------------- public int getDiameter () { return diameteri; }
Page 151 of 275
//----------------------------------------------------------------- // Ngjyrat. //----------------------------------------------------------------- public Color getColor () { return ngjyra; }
//----------------------------------------------------------------- // X. //----------------------------------------------------------------- public int getX () { return x; }
//----------------------------------------------------------------- // Y. //----------------------------------------------------------------- public int getY () { return y; } } 12.2 Butonat Le t shpjegojm prdorimin e butonave me nj shembull. Programi 12. 6 i krkon prdoruesit t klikoj butonin me mouse dhe do her q butoni shtypet
Page 152 of 275
vlerat llogariten. Ky buton sht prcaktuar nga klasa JButon. Me interes n kt program sht se ne krijojm nj list objektesh kur butoni shtypet shtyp.addActionListener (new ButtonListener());, pra ne duhet t krijojm nj klas q prezanton kt list. Ne mund t krijojm nj klas ButtonListener mnjan ose n t njjtn klas. Kto lloj klasash prdoren rrall dhe vetm n rastet kur gjenden marrdhnie shum t ngushta ndrmjet tyre. Klasat Listeners shpesh prcaktohen si klasa t brendshme sepse ato kan marrdhnie shum t ngushta me klasat GUI, kshtu q ajo automatikisht ka akses tek klasa GUI.
public class ButonNumero { //----------------------------------------------------------------- // Main program frame. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Shtyp Butonin"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
public class ButonNumeroPanel extends JPanel { private int numero; private JButton shtyp; private JLabel label;
//----------------------------------------------------------------- // Constructor: Vendos GUI. //----------------------------------------------------------------- public ButonNumeroPanel () { numero = 10;
shtyp = new JButton ("Shtyp Butonin"); shtyp.addActionListener (new ButtonListener());
label = new JLabel ("Shtyp: " + numero);
add (shtyp); add (label);
setPreferredSize (new Dimension(300, 40)); setBackground (Color.green); }
//***************************************************************** // Nje liste per butonat qe shtypen.
Page 155 of 275
//***************************************************************** private class ButtonListener implements ActionListener { //-------------------------------------------------------------- // Vlerat e reja te counter dhe label kur butoni shtypet. //-------------------------------------------------------------- public void actionPerformed (ActionEvent event) { numero--; label.setText("Shtyp: " + numero); } } }
12.3 Fushat e Tekstit Le t shohim nj tjetr shembull q prdor text fields. Metoda kryesore n klasn KonvertoTemp prfshin nj text field n t cilin prdoruesi mund t type temperaturn n Fahrenhait. Kur prdoruesi shtyp enter kjo temperatur konvertohet n Celcius. Nj text field sht nj klas JTextField. N Programi 12. 9 constructor JtextField merr nj parametr integer q specifikon dimensionet e fushs. Text field dhe disa labels jan shtuar n panel q ato t shfaqen kur frame bhet e dukshme. Si dhe e shpjeguam n programin q prdorm pr butonat edhe n kt program po prdorim nj listener si nj klas t brendshme. Provojeni programin dhe fusni vlera t ndryshme pr temperaturn n Fahrenhait dhe vreni se si ajo konvertohet n Celcius.
// Perdorimi i text fields. //********************************************************************
import javax.swing.JFrame;
public class KonvertoTemp { //----------------------------------------------------------------- // Krijon dhe konverton temperaturen. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Konverto Temperaturen"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
KonvertoTempPanel panel = new KonvertoTempPanel();
Programi 12. 9 //******************************************************************** // KonvertoTempPanel.java Autor: Gjergji Shaska // // Demonstrates the use of text fields. //********************************************************************
public class KonvertoTempPanel extends JPanel { private JLabel inputLabel, outputLabel, resultatiLabel; private JTextField fahrenheit;
Page 158 of 275
//----------------------------------------------------------------- // Constructor: Vendos komponentet GUI. //----------------------------------------------------------------- public KonvertoTempPanel() { inputLabel = new JLabel ("Fut temperaturen ne Fahrenheit:"); outputLabel = new JLabel ("Temperatura ne Celsius eshte: "); resultatiLabel = new JLabel ("---");
fahrenheit = new JTextField (5); fahrenheit.addActionListener (new TempListener());
setPreferredSize (new Dimension(300, 75)); setBackground (Color.orange); }
//***************************************************************** // Tregon nje veprim listener per temperaturen. //***************************************************************** private class TempListener implements ActionListener { //--------------------------------------------------------------
Page 159 of 275
// Konverton kur shtypim enter. //-------------------------------------------------------------- public void actionPerformed (ActionEvent event) { int fahrenheitTemp, celsiusTemp;
12.1 Prse Listeners deklarohen shpesh si klasa t brendshme? 12.2 Kush sht kuptimi i extends i prdorur n programet e ktij kapitulli? 12.3 far do t jet funksioni i kodit n vazhdim i prdourur n programet e ktij kapitulli? shtyp.addActionListener (new ButtonListener());
Page 161 of 275
Kapitulli 13
OBJEKTET GRAFIKE ME IF DHE FOR
N kt kapitull do t prqndrohemi n prdorimin e fjalive t kushtzuara dhe loop, pr t krijuar objekte grafike t llojeve dhe tipeve t ndryshme. Do t vazhdojm m pas duke e zhvilluar akoma m tej iden pr objektet listener q ne i prmendm n kapitullin 11.
13.1 Vizato me Fjalit e Kushtzuara if Klasa Syri n Programi 13. 1 prmban metodn kryesore por vizatimi kryhet n klasn SyriPanel t Programi 13. 2. PaintComponent n kt klas prdor nj fjali if pr t alternuar ngjyrat ndrmjet t kuqes dhe t bardhs. do rreth vizatohet si nj rreth i mbushur dhe duke qen se ne i vendosim ata njri mbi tjetrin krijohet ideja e rrathve. N fund nj rreth i zi vizatohet pr beben e syrit.
Programi 13. 1 //******************************************************************** // Syri.java Autor: Gjergji Shaska // // Perdorimi i fjalive te kushtezuara dhe loops per te vizatuar. //********************************************************************
Page 162 of 275
import javax.swing.JFrame;
public class Syri { //----------------------------------------------------------------- // Frame kryesor i programit. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Syri"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Programi 13. 2 //******************************************************************** // SyriPanel.java Autor: Gjergji Shaska // // Perdorimi i fjalive te kushtezuara dhe loops per te vizatuar. //********************************************************************
import javax.swing.JPanel; import java.awt.*;
public class SyriPanel extends JPanel { private final int MAX_GJERSI = 400, NUM_RRATH = 5, RING_GJERSI = 25;
//----------------------------------------------------------------- // vendos panelin e syrit.
Page 164 of 275
//----------------------------------------------------------------- public SyriPanel () { setBackground (Color.green); setPreferredSize (new Dimension(400,400)); }
//----------------------------------------------------------------- // Ngjyrat e syrit. //----------------------------------------------------------------- public void paintComponent (Graphics page) { super.paintComponent (page);
int x = 0, y = 0, diameter = MAX_GJERSI;
page.setColor (Color.white);
for (int numero = 0; numero < NUM_RRATH; numero++) { if (page.getColor() == Color.red) // alternimi i ngjyrave page.setColor (Color.white); else page.setColor (Color.red);
page.fillOval (x, y, diameter, diameter);
Page 165 of 275
diameter -= (2 * RING_GJERSI); x += RING_GJERSI; y += RING_GJERSI; }
// Vizaton beben e syrit page.setColor (Color.black); page.fillOval (x, y, diameter, diameter); } }
13.2 Vizato me Fjalit Loop Le t shohim dhe nj shembull tjetr. Programi 13. 3 tregon klasn Kuti e cila fillon dhe paraqet klasn KutiPanel e treguar n Programi 13. 4. Qllimi i ktij programi sht t vizatoj disa drejtkndsha, nse gjersia e tyre sht m e vogl se nj variabl trashsi e caktuar (n rastin ton 10 pixels) kutia sht mbushur me ngyrn e verdh. Nse lartsia sht m e vogl se variabla trashsia kutia sht mbushur me ngjyrn jeshile. Kutit e tjera jan me ngjyr t kuqe.
Programi 13. 3 //******************************************************************** // Kuti.java Autor: Gjergji Shaska // // Perdorimi i fjalive te kushtezuara dhe loop. //********************************************************************
import javax.swing.JFrame;
public class Kuti
Page 166 of 275
{ //----------------------------------------------------------------- // Frame kryesore per programin. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Kuti"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
public class KutiPanel extends JPanel { private final int NUM_KUTI = 50, TRASHESI = 10, MAX_DIME = 50; private final int MAX_X = 350, MAX_Y = 250; private Random gjeneron;
//----------------------------------------------------------------- // Vendos panelin e vizatimit. //----------------------------------------------------------------- public KutiPanel () { gjeneron = new Random();
setBackground (Color.black); setPreferredSize (new Dimension(400, 300)); }
Page 168 of 275
//----------------------------------------------------------------- // Ngjyros kutit. Kutit e erreta dhe te shkurtra jane mbushur. //----------------------------------------------------------------- public void paintComponent(Graphics page) { super.paintComponent (page);
int x, y, gjeresi, lartesi;
for (int numero = 0; numero < NUM_KUTI; numero++) { x = gjeneron.nextInt(MAX_X) + 1; y = gjeneron.nextInt(MAX_Y) + 1;
if (gjeresi <= TRASHESI) // shiko per kutit e erreta { page.setColor (Color.yellow); page.fillRect (x, y, gjeresi, lartesi); } else if (lartesi <= TRASHESI) // shiko per kutit e shkurtra { page.setColor (Color.green);
Page 169 of 275
page.fillRect (x, y, gjeresi, lartesi); } else { page.setColor (Color.red); page.drawRect (x, y, gjeresi, lartesi); } } } }
Page 170 of 275
USHTRIME DHE PROBLEMA
13.1 Ndrysho kodin pr Programi 13. 2 n mnyr t till q bebja e syrit t jet blu dhe rrethi i par pas bebes s syrit t jet i zi. 13.1 Ndrysho kodin pr Programi 13. 4 n mnyr q gjersia e kutive t cilat jan m t vogla se 7 pixels t mbushen me ngjyrn e bardh.
Page 171 of 275
Kapitulli 14
DIALOG BOXES, CHECK BOXES, RADIO BUTTONS
N kt kapitull do t shpjegojm dialog boxes nj tjetr komponent q prdoret gjersisht n GUI. Nj dialog boxe sht nj dritare grafike q shfaqet mbi dritaren e aktivizuar n at moment dhe prdoruesi mund ta prdor at. N vazhdim do t vazhdojm me check boxes dhe radio buttons.
14.1 Dialog Boxes Nj dialog boxe ka lloje t ndryshme funksionesh si: konfirmon nj veprim, i lejon prdoruesit t fusi informacionin, konverton informacion etj. Prdorimi i dialog boxes bhet i mundur nga package n librarin e Java e cila prmban nj klas t quajtur JOptionPane. Le t shikojm shembullin n vazhdim ku Programi 14. 1 ka nj objekt listener i cili prdoret nga dy komponent t ndryshm. Ky program shfaq nj label dhe dy butona, kur butoni majtas klikohet n label shfaqet Majtas dhe kur butoni djathtas klikohet n label shfaqet Djathtas. Klasa MajtasPanel n Programi 14. 2 krijon nj objekt pr ButonListener dhe e shton at listener n t dy butonat. Metoda actionPerformed prdor nj fjali if-else pr t prcaktuar cili buton sht klikuar. Kushti pr fjalin if krahasohet me burimin dhe nse sht i njjt, n label do t shfaqet Majtas, n t kundrt do t shfaqet Djathtas. Vereni me kujdes se si klasa listener sht krijuar, por ne mund t kishim krijuar dhe dy klasa t ndara nj pr butonin majtas dhe tjetrn pr butonin djathtas. Vine re se t dy butonat vendosen n t njjtin panel q quhet butonPanel, i cili sht i ndar
Page 172 of 275
nga paneli i klass LeftRightPanel. Nga vendosja e t dy butonave n nj panel garantohet pamja vizuale e tyre n lidhje me njri-tjetrin.
Programi 14. 1 //******************************************************************** // Majtas.java Autor: Gjergji Shaska // Perdorimi i nje listener per disa butona. //********************************************************************
import javax.swing.JFrame;
public class Majtas { //----------------------------------------------------------------- // Programi kryesor frame. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Majtas Djathtas"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Programi 14. 2 //******************************************************************** // MajtasPanel.java Autor: Gjergji Shaska // // Perdorimi i nje listener per disa butona. //********************************************************************
public class MajtasPanel extends JPanel { private JButton majtas, djathtas; private JLabel label; private JPanel butonPanel;
Page 174 of 275
//----------------------------------------------------------------- // Constructor: Vendos GUI. //----------------------------------------------------------------- public MajtasPanel () { majtas = new JButton ("Majtas"); djathtas = new JButton ("Djathtas");
ButtonListener listener = new ButtonListener(); majtas.addActionListener (listener); djathtas.addActionListener (listener);
label = new JLabel ("Shtyp butonin");
butonPanel = new JPanel(); butonPanel.setPreferredSize (new Dimension(200, 40)); butonPanel.setBackground (Color.red); butonPanel.add (majtas); butonPanel.add (djathtas);
//***************************************************************** // Prezanton nje listener per te dy butonat. //***************************************************************** private class ButtonListener implements ActionListener { //-------------------------------------------------------------- // Percakton cili buton eshte shtypur dhe vendos tekstin per label //-------------------------------------------------------------- public void actionPerformed (ActionEvent event) { if (event.getSource() == majtas) label.setText("Majtas"); else label.setText("Djathtas"); } } } 14.2 Check Boxes Nj check boxe sht nj buton q mund t kthehet on or off duke prdorur mousin. N t njjtn mnyr funksionon dhe nj grup check boxes ku secili prej tyre operon i pavarur, e thn m thjesht secili mund t vendoset on ose off dhe kjo nuk influencon tek t tjert. Programi 14. 3 shfaq dy check boxes dhe nj label, t cilat prcaktojn far fonti teksi do t shfaqet: bold, italic, t dyja s bashku apo pa asnj prej tyre. Pra kur check box pr bold t klikohet teksti do t shfaqet n bold, kur check box pr italic t klikohet dhe check box pr bold t jet jo i klikuar teksi do t jet n italic, kur t dyja t jen t klikura teksi do t jet dhe n bold dhe n italic.
Programi 14. 4 tregon GUI pr programin DyOpsione. Si e shihni nj check box prezantohet nga klasa JCheckBox. Kur check box ndryshon state nga i klikuar n
Page 176 of 275
jo i klikuar ose e anasjellta, ai gjeneron nj ngjarje. Ky program prdor nj klas Font e cila paraqet nj karakter t veant font, i cili prcaktohet nga emri, tipi dhe madhsia font. N kt program ne po prdorim Courier font dhe tipi mund t jet bold, italic ose s bashku bold dhe italic. Metoda itemStateChanged prcakton far tipi font do t kemi kur nj nga check boxe ndryshon pozicion. Kjo arrihet pasi do check box konsultohet me metodn isSelected e cila kthen nj vler boolen. Nse check box bold sht klikuar variabla tipi vendoset bold dhe nse check box italic sht klikuar konstantja ITALIC shtohet n variabln tipi. S fundmi fonti i label vendoset n nj font t ri me emrin, tipi dhe madhsin e tekstit.
public class DyOpsione { //----------------------------------------------------------------- // Krijimi i programit frame. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Dy Opsione"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Page 177 of 275
DyOpsionePanel panel = new DyOpsionePanel(); frame.getContentPane().add (panel);
public class DyOpsionePanel extends JPanel { private JLabel saying; private JCheckBox bold, italic;
//----------------------------------------------------------------- // Nje panel dhe nje label qe kontrollon fontin e shkrimit. //----------------------------------------------------------------- public DyOpsionePanel() { saying = new JLabel ("Bregdeti i Vlores eshte i bukur."); saying.setFont (new Font ("Courier", Font.PLAIN, 26));
bold = new JCheckBox ("Bold"); bold.setBackground (Color.red); italic = new JCheckBox ("Italic"); italic.setBackground (Color.red);
StyleListener listener = new StyleListener(); bold.addItemListener (listener); italic.addItemListener (listener);
add (saying); add (bold);
Page 179 of 275
add (italic);
setBackground (Color.green); setPreferredSize (new Dimension(520, 100)); }
//***************************************************************** // Prezanton listener per te dy check boxes. //***************************************************************** private class StyleListener implements ItemListener { //-------------------------------------------------------------- // Update tipin e fontit per label. //-------------------------------------------------------------- public void itemStateChanged (ItemEvent event) { int tipi = Font.PLAIN;
if (bold.isSelected()) tipi = Font.BOLD;
if (italic.isSelected()) tipi += Font.ITALIC;
saying.setFont (new Font ("Courier", tipi, 26)); } }
Page 180 of 275
} 14.3 Radio Buttons Nj buton radio prdoret me butona t tjer pr t kryer funksione t caktuara. Zakonisht nj buton radio nuk prdoret i vetm, ai ka kuptim kur ai prdoret me nj ose disa butona t tjer. Kur njri prej tyre klikohet automatikisht tjetri q ishte on kthehet off. Prej funksionit q kryen nj buton radio merr dhe emrin, i cili ka kuptimin e nj butoni radio q ndrron stacionet. Programi 14. 5 shfaq nj label dhe nj grup butonash radio. Kta butona radio prcaktojn se kush nga makinat do t shfaqet n label. Kur ne klikojm mbi butonin Fiat n label do t shfaqet teksti; Fiat stht nj makin Italiane, kur ne klikojm butonin Benx n label do t shfaqet teksti; Benx stht nj makin Gjermane dhe kur ne klikojm butonin Ford n label do t shfaqet teksti; Ford stht nj makin Amerikane. Klasa tjetr OpsionePanel e programit Programi 14. 6 prcakton dhe shfaq komponentt GUI. Nj buton radio pezantohet nga klasa JRadioButton. Klasa ButtonGroup prdoret pr t prcaktuar lidhjen ndrmjet butonave sepse kta butona radio punojn s bashku. Vini re se secili buton shtohet tek grupi buton dhe gjithashtu secili buton shtohet n panel. ButtonGroup siguron q nse nj buton radio sht on ai kthehet off kur nj tjetr buton kthehet on. Metoda actionPerformed fillimisht gjen burimin duke prdorur metodn getSource dhe e krahason at me tre butonat radio duke shfaqur tekstin sipas butonit korespondus. Nse do t krahasonim butonat radio me check boxes do t thoshim se butonat radio kryejn nj veprim vetm kur ata jan on, ndrsa check boxes kryejn veprim n t dy rastet on dhe off.
public class Opsione { //----------------------------------------------------------------- // Krijon programin frame. //----------------------------------------------------------------- public static void main (String[] args) { JFrame frame = new JFrame ("Opsione"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
OpsionePanel panel = new OpsionePanel(); frame.getContentPane().add (panel);
public class OpsionePanel extends JPanel { private JLabel makinat; private JRadioButton fiat, benx, ford; private String fiatmakinat, benxmakinat, fordmakinat;
//----------------------------------------------------------------- // Vendos nje panel me nje label dhe zgjedhjet // per butonat radio. //----------------------------------------------------------------- public OpsionePanel() { fiatmakinat = "Fiat eshte nje makine Italiane."; benxmakinat = "Benx eshte nje makine Gjermane."; fordmakinat = "Ford eshte nje makine Amerikane.";
makinat = new JLabel (fiatmakinat); makinat.setFont (new Font ("Courier", Font.BOLD, 24));
fiat = new JRadioButton ("Fiat", true); fiat.setBackground (Color.yellow); benx = new JRadioButton ("Benx"); benx.setBackground (Color.yellow);
Page 183 of 275
ford = new JRadioButton ("Ford"); ford.setBackground (Color.yellow);
ButtonGroup group = new ButtonGroup(); group.add (fiat); group.add (benx); group.add (ford);
setBackground (Color.yellow); setPreferredSize (new Dimension(450, 100)); }
//***************************************************************** // Prezanto listener per te gjithe butonat radio. //***************************************************************** private class QuoteListener implements ActionListener {
Page 184 of 275
//-------------------------------------------------------------- // Vendos tekstin e label duke pare kush prej butonave // radio eshte on. //-------------------------------------------------------------- public void actionPerformed (ActionEvent event) { Object source = event.getSource();
if (source == fiat) makinat.setText (fiatmakinat); else if (source == benx) makinat.setText (benxmakinat); else makinat.setText (fordmakinat); } } }
14.1 Modifiko klasn MajtasPanel n Programi 14. 2 n mnyr t till q label t tregoj Shtyp butonin Majtas ose Djathtas, paneli t ket prmasat (240, 60) dhe ngjyra e tij t jet blu. 14.2 Modifiko kodin e Programi 14. 4 n mnyr t till q n label t shfaqet emri dhe mbiemri juaj me font times new roman dhe madhsi 36. Tregoni kujdes pasi q teksti t prshtatet me dimensionet e frame duhet t kujdeseni pr dimensionet e tij. 14.3 Kush sht ndryshimi ndrmjet check boxes dhe radio buttons? 14.4 Vreni kodin e mposhtm i prdorur n Programi 14. 6. Kush shte funksioni i fjals true dhe nse ajo nuk prdoret n kod far rezultati do t merrnim? fiat = new JRadioButton ("Fiat", true);
Page 187 of 275
Kapitulli 15
IDENTIFIKIMI I KLASAVE DHE OBJEKTEVE
Ky kapitull do t shpjegoj dizenjimin e object-oriented software. Fillimisht do t fokusohemi n etapat gjat programimit dhe n identifikimin e klasave dhe objekteve. Gjithashtu n kte kapitull do t shpjegojm diagramat UML nj ndihm e madhe n dizenjimin jo vetm n Java por dhe n gjuh t tjera programimi.
15.1 Identifikimi i Klasave dhe Objekteve Deri tani programimet tona kan qen t prbra prej nj ose dy klasa por n vazhdim ne do t kemi programe t prbra prej shum klasash. Mendojeni se sa e rndsishme sht t krijojm nj skem t zgjidhjes s problemit para se t fillojm dhe t shkruajm kodin, i cili pothuajse bhet i parealizushm pa nj dizenjim t till. Personi apo personat q kan nevoj pr nj software shpesh nuk e kan iden e programimit por ata kan nj list me krkesa se far funksioni programi duhet t kryej. Pra e thn ndryshe programuesi para se t filloj t shkruaj nj program duhet t punoj ngusht me klientin pr t prcaktuar t gjitha krkesat e klientit dhe se si ato mund t implementohen. Nj dizenjim softwari tregon, si nj program do ti realizoj kto krkesa. Ky dizenjim specifikon klasat dhe objektet q do t nevoiten n kt program dhe prcakton se si ato do t lidhen me njra-tjetrn. far tham m sipr do ta ilustronim me shembullin e nj inxhinjeri ndrtimi i cili kurr nuk mund t
Page 188 of 275
fillonte punn pr ndrtimin e nj pallati pa pasur m par nj skem t ktij pallati. Nj pjes e rndsishme e dizenjimit t object-oriented software sht prcaktimi i klasave q do t na nevoiten n kt program. Kto klasa prcaktojn objektet q ne do t menaxhojm n kt program. Zakonisht objektet jan emra, pra ne mund ta nisim punn ton duke identifukuar emrat, dhe pastaj t mundohemi ti reduktojm ata pasi jo do objekt do t jet nj klas. Nj klas prezanton nj grup objektesh t ngjashm. Pra hapi i dyt do t jet grupimi i ktyre emrave n grupe t ngjashm sipas veorive t tyre, ku secilit grup do i japim nga nj emr. Kto klasa deklarohen n numrin njjs si: Student, Flamurtari, Vizato etj t cilat ne i kemi prdorur n kapitujt e kaluar. Si tham n pjesn hyrse t ktij kapitulli diagramat UML prdoren gjersisht n dizenjimin e programimit n Java. Emri UML sht Unified Modelin Language, ku emri i softwarit sht Dia t cilin ju mund ta instaloni nga interneti. UML tregon shum aspekte t object-oriented programing por n kt klas ne do t fokusohemi n diagramat e klasave UML, pr t treguar prmbajten e klasave dhe lidhjet ndrmjet tyre. Nj diagram UML na ndimon n mnyrn vizuale t prmbajtjes dhe lidhjeve ndrmjet klasave n nj program. N nj diagram do klas sht prezantuar me nj drejtkndsh, q ka tre pjes q tregon emrin e klass, variablat dhe metodat. Shikoni nj shembull t thjesht pr nj diagram UML n Fig. 15. 1, e cila prmban klasn Regjistrim dhe klasn Student e cila sht e varur nga klasa kryesore. N klasn Student kemi tre variabla: Emri i cili sht nj variabl pr t ruajtur emrat e studentve, Nr_studentit q sht nj variabl pr numrin q disponon do student dhe Departamenti q sht variaba pr tju referuar do studenti sipas departamentit. N pjesn e tret t klass Student kemi dy metoda; ruajnumrin dhe toString. Shenja pozitve q prdoret prpara ktyre fjalve tregon se visibility sht public dhe shenja minus tregon se visibility sht privat. Shigjeta me vija t ndrprera tregon se njra klas prdor metodat e klass tjetr, pra klasat jan t varura nga njra-tjetra. Kini parasysh se UML nuk sht specifike pr programin Java, ajo sht m vete dhe gjuha e saj ka dhe ndryshime me at t programit Java. N vazhdim kur klasat t bhen shum t ndrlikuara diagramat UML do t jen shum t nevojshm.
Page 189 of 275
Fig. 15. 1 Diagrami UML
15.2 Variablat dhe Metodat Static Ne i kemi prdorur variablat static dhe m par por pa i shjeguar n detaje ato. Nj metod static thrritet nga emri i klass dhe jo nga nj objekt n at klas. Deklarimi i metodave static bhet nprmjet fjals s rezervuar n Java static. Deri tani ne kemi par dy kategori t variablave: local variables q deklarohen brenda nj metode dhe instance variables q deklarohen n nj klas por jo brenda nj metode. T gjith objektet e klass kan akses n nj variabl q deklarohet static, q shpesh thrritet klas variabl. Por nse do t ndryshonim vlern e variabls n nj objekt vlera e saj do t ndyshonte edhe n pozicionet e tjera ku ajo prdoret, pra prdorimi i saj do njfar kujdesi sepse pa dashur do ndryshonim vlerat e saj edhe n pozicione t tjera t programit. Kini parasysh se nj local variable nuk mund t deklarohet static. Nj metod pr tu deklaruar static prdor fjaln e rezervuar n Java static. N t gjith programet q ne kemi par deri tani metoda kryesore deklarohet static dhe kjo sht e deryruar pr arsyen se metoda kryesore mund t ekzekutohet pa e deklaruar objektin. Programi 15. 1 deklaron disa objekte n klasn Fjali dhe i printon ato. N fjalin e fundit vini re metodn getCount e cila kthen numrin e objekteve Fjali. Programi 15. 2 tregon klasn FjaliNumero. Ne po prdorim nj constructor e cila rrit variabln numero e cila fillon n zero. Numero sht nj variabl e cila numrron numrin e deklarimeve Fjali t krijura. Vini re se metoda getCount sht deklaruar static e cila bn t mundur q kjo metod t arrihet nprmjet emrit t klass n metodn kryesore. Programi 15. 1 //******************************************************************** // Fjali.java Autor: Gjergji Shaska
Page 190 of 275
// Perdorimi i static. //********************************************************************
public class Fjali { //----------------------------------------------------------------- // Krijon disa objekte fjalish dhe i printon ato. //----------------------------------------------------------------- public static void main (String[] args) { FjaliNumero obj;
obj = new FjaliNumero ("Bregdeti i Vlores eshte i bukur."); System.out.println (obj);
obj = new FjaliNumero ("UV ka shume studente te mire."); System.out.println (obj);
obj = new FjaliNumero ("Qe te kesh sukses duhet te punosh shume."); System.out.println (obj);
obj = new FjaliNumero ("Gjimnazi Ali Demi."); System.out.println (obj);
obj = new FjaliNumero ("Kete jave Flamurtari fitoi."); System.out.println (obj);
//----------------------------------------------------------------- // Kthen fjalin si nje string. //----------------------------------------------------------------- public String toString() { return fjali; }
//----------------------------------------------------------------- // Kthen numrin e variables numero. //----------------------------------------------------------------- public static int getCount () { return numero; } }
Page 193 of 275
USHTRIME DHE PROBLEMA
15.1 Identifikoni klasat dhe objektet dhe ndrtoni nj diagram UML pr problemin n vazhdim. Nj universitet krkon t ndrtoj nj software pr zyrn e regjistrimit, e cila t jet e organizuar sipas tre departamenteve. Departamenti i shkencave ekzakte i cili ka dy zyra regjistrimi, departamenti i elektrikes dhe kompiuter science q ka tre zyra regjistrimi dhe departamenti i gjuheve t huaja q ka nj zyr regjistrimi. T dhnat pr do student pr tu regjistruar jan; emri, numri i studentit, dega dhe viti. 15.2 far do t ndoth nse Programi 15. 2 nuk e deklaron metodn getCount static? Shpjegoni prgjigjen tuaj.
Page 194 of 275
Kapitulli 16
MARRDHNIET NDRMJET KLASAVE
Klasat n software kan disa mnyra lidhjesh me njra-tjetrn, por tre prej tyre jan m t prdorshmet: dependency, aggregation dhe inheritance. Ne kemi prdorur dependency shum her n kapitujt e kaluar ku nj klas sht e varur nga nj tjetr, por n kt kapitull do t shpjegojm kur nj klas sht e varur nga vetja e saj.
16.1 Dependency Nse do i referoheshim diagramit UML t prdorur n kapitullin 15 do t thoshim se klasa Regjistrim prdor klasn Student, e cila nnkupton q t paktn nj prej metodave t klass Regjistrim prdor metodn e klass Student. Nse metoda e klass Student deklarohet static ather klasa Regjistrim i drejtohet asaj direkt me emrin e saj. N prgjithsi ne mundohemi t kemi nj numr sa m t vogl t klasave t varura nga njra-tjetra sepse kjo do na lehtsonte punn si programus. Prve lidhjeve t varsis ndrmjet dy klasave kemi dhe rastin kur nj klas varet nga vetvetja, q do t thot se nj objekt i nj klase bashkpunon me nj objekt tjetr t s njjts klas. Le t shikojm nj shembull pr ta kuptuar kt ide. Programi 16. 1 krijon dy objekte t cilt prezantojn dy numra racional dhe kryejn llogaritje me ta. Klasa RacionalNumer n Programi 16. 2 ka disa metoda pr kryerjen e llogaritjeve si mbledhja, zbritja, shumzimi dhe pjestimi. Vreni se si metodat e ksaj klase prdorin objekte t po ksaj klase. Nse do ta provoni kt program do t shihni se prve nj shigjete me vija t ndrprera q tregon lidhjen ndrmjet klass kryesore Test dhe Klass RacionalNumer gjendet dhe nj tjetr shigjet e till me fillim dhe mbarim n klasn RacionalNumer, e cila tregon
Page 195 of 275
se kjo klas sht e varur nga vetvetja. Nj tjetr metod e prdorur n kt klas sht isLike, e cila nuk bn gj tjetr por vetm sa krahason dy numrat racional nse ata jan t barabart. N metodn e fundit t programit vini re se kemi prdorur deklarimin private, i cili nuk lejon prdorimin e ksaj metode jasht klass RacionalNumer, kjo klas prdoret vetm pr t ndimuar n llogaritje n kt klas. Programi 16. 1 //******************************************************************** // Test.java Autor: Gjergji Shaska // // Perdorimi i disa objekteve Racional. //********************************************************************
public class Test { //----------------------------------------------------------------- // Krijon disa numra racional. //----------------------------------------------------------------- public static void main (String[] args) { RacionalNumer r1 = new RacionalNumer (5, 7); RacionalNumer r2 = new RacionalNumer (2, 3); RacionalNumer r3, r4, r5, r6, r7;
System.out.println ("Numri i pare racional: " + r1); System.out.println ("Numri i dyte racional: " + r2);
if (r1.baraz(r2)) System.out.println ("r1 dhe r2 jane te barabarte.");
Page 196 of 275
else System.out.println ("r1 dhe r2 nuk jane te barabarte.");
System.out.println ("r1 + r2: " + r4); System.out.println ("r1 - r2: " + r5); System.out.println ("r1 * r2: " + r6); System.out.println ("r1 / r2: " + r7); } } Output---------------------------------------------------------------------------------------- Numri i pare racional: 5/7 Numri i dyte racional: 2/3 r1 dhe r2 nuk jane te barabarte. Anasjellti i r1 eshte: 7/5 r1 + r2: 29/21 r1 - r2: 1/21 r1 * r2: 10/21 r1 / r2: 15/14 Programi 16. 2
Page 197 of 275
//******************************************************************** // RacionalNumer.java Autor: Gjergji Shaska // // Prezanton nje numer racional me numerusin dhe emerusin. //********************************************************************
public class RacionalNumer { private int numerus, emerus;
//----------------------------------------------------------------- // Constructor: Vendos nje numer racional duke u siguruar // jo 0 ne emerus. //----------------------------------------------------------------- public RacionalNumer (int numer, int emer) { if (emer == 0) emer = 1;
// Bene numerusin te ruaj shenjen. if (emer < 0) { numer = numer * -1; emer = emer * -1; }
numerus = numer;
Page 198 of 275
emerus = emer;
reduce(); }
//----------------------------------------------------------------- // Kthen numerusin e ketij numri racional. //----------------------------------------------------------------- public int getNumerus () { return numerus; }
//----------------------------------------------------------------- // Kthen emerusin e ketij numri racional. //----------------------------------------------------------------- public int getEmerus () { return emerus; }
//----------------------------------------------------------------- // Kthen anasjelltin e ketij numri raciona. //----------------------------------------------------------------- public RacionalNumer anasjellt () { return new RacionalNumer (emerus, numerus);
Page 199 of 275
}
//----------------------------------------------------------------- // Shton numrin racional. //----------------------------------------------------------------- public RacionalNumer add (RacionalNumer op2) { int emerusZakonisht = emerus * op2.getEmerus(); int numerus1 = numerus * op2.getEmerus(); int numerus2 = op2.getNumerus() * emerus; int shum = numerus1 + numerus2;
return new RacionalNumer (shum, emerusZakonisht); }
//----------------------------------------------------------------- // Zbret numrin racional. //----------------------------------------------------------------- public RacionalNumer zbret (RacionalNumer op2) { int emerusZakonisht = emerus * op2.getEmerus(); int numerus1 = numerus * op2.getEmerus(); int numerus2 = op2.getNumerus() * emerus; int diferenca = numerus1 - numerus2;
return new RacionalNumer (diferenca, emerusZakonisht); }
Page 200 of 275
//----------------------------------------------------------------- // Shumezon kete numer rational. //----------------------------------------------------------------- public RacionalNumer shumezo (RacionalNumer op2) { int numer = numerus * op2.getNumerus(); int emer = emerus * op2.getEmerus();
return new RacionalNumer (numer, emer); }
//----------------------------------------------------------------- // Pjeseto kete numer rational //----------------------------------------------------------------- public RacionalNumer pjeseto (RacionalNumer op2) { return shumezo (op2.anasjellt()); }
//----------------------------------------------------------------- // Percakto nese ky numer racional eshte i barabarte ma ate // te kaluar si parameter. //----------------------------------------------------------------- public boolean baraz (RacionalNumer op2) { return ( numerus == op2.getNumerus() &&
Page 201 of 275
emerus == op2.getEmerus() ); }
//----------------------------------------------------------------- // Kthen kete numer si string. //----------------------------------------------------------------- public String toString () { String result;
if (numerus == 0) result = "0"; else if (emerus == 1) result = numerus + ""; else result = numerus + "/" + emerus;
return result; }
//----------------------------------------------------------------- // Pjeseton te dy numerusat. //----------------------------------------------------------------- private void reduce () { if (numerus != 0)
Page 202 of 275
{ int zakonisht = gcd (Math.abs(numerus), emerus);
numerus = numerus / zakonisht; emerus = emerus / zakonisht; } } //----------------------------------------------------------------- // Algoritmi i Euclid. //----------------------------------------------------------------- private int gcd (int num1, int num2) { while (num1 != num2) if (num1 > num2) num1 = num1 - num2; else num2 = num2 - num1; return num1; } }
16.2 Aggregation Aggregation sht kur nj objekt sht ndrtuar nga objekte t tjera. Mendojeni kt si nj shtpi e cila sht e ndrtuar nga tavolina, karriket, kolltukt etj. Secila prej ktyre pjesve konsiderohet si nj objekt m vete. N kt rast kur nj pjes sht e prbr nga objekte t tjera ne themi se shtpia sht nj aggregation. N Java ne prcaktojm nj aggregation si nj objekt i cili ka referenc tek objekte t tjera. Po ta shohim me kujdes aggregation sht nj tip i veant varsie.
Page 203 of 275
Le t shohim nj shembull. Programi 16. 3 krijon dy objekte Student ku secili sht i prbr nga dy adresa; njra adresa e shtpis dhe tjetra adresa e shkolls. Metoda kryesore i krijon kta objekte Student dhe i printon. Klasa Student n Programi 16. 4 tregon nj student, i cili i merr vlerat nga klasa Adresa. Programi 16. 5 tregon klasn Adresa e cila prezanton adresn sipas rruga, qyteti, shteti dhe numri postar. Vini re se asgj t veant n klasn Adresa nuk ka q t tregoj se ajo sht pjes e objektit Student, klasa Adresa mund t prdoret n do situat ku nevoitet informacioni i adress. Vini re se nj mnyr e veant this prdoret n constructor e klass Adresa. Fjala this sht nj fjal e rezervuar n Java e cila i lejon nj objekti ti referohet vetvetes. Vini re se duke e krahasuar me constructor e klass Student e cila prdor tet variabla, constructor e klass Adresa prdor vetm katr variabla. Kjo sht nj mnyr shum e prdorshme n programimin n Java e cila na krijon ne lehtsira n gjetjen e nj numri m t vogl variablash. Vini re se emri i deklaruar dhe emri i prdorur n constructor sht i njjt the mnyra e deklarimit sht: this.rruga = rruga; Programi 16. 3 //******************************************************************** // Struktura.java Autor: Gjergji Shaska // // Perdorimi i klasave aggregate. //********************************************************************
public class Struktura { //----------------------------------------------------------------- // Krijon disa objekte Adresa dhe Student dhe i printon. //----------------------------------------------------------------- public static void main (String[] args) { Adresa shkoll = new Adresa ("Ll.Isa Boletini,", "Vlore",
Page 204 of 275
"Albania", 2134);
Adresa gjShtepi = new Adresa ("Ll. Isa Boletini", "Vlore", "Albania", 3456); Student gjergji = new Student ("Gjergji", "Shaska", gjShtepi, shkoll);
Adresa dShtepi = new Adresa ("Ll.Pallatet Gintash", "Tirane", "Albania", 5678); Student dritan = new Student ("Dritan", "Lena", dShtepi, shkoll);
public class Student { private String emri, mbiemri; private Adresa shtepiAdres, shkollAdres;
//----------------------------------------------------------------- // Constructor: Vendos studentin me vlerat spcifike. //----------------------------------------------------------------- public Student (String firstName, String lastName, Adresa shtepi, Adresa shkoll) { emri = firstName; mbiemri = lastName; shtepiAdres = shtepi; shkollAdres = shkoll;
Page 206 of 275
}
//----------------------------------------------------------------- // Kthen nje string te objektit Student. //----------------------------------------------------------------- public String toString() { String rezultat;
rezultat = emri + " " + mbiemri + "\n"; rezultat += "Adresa shtepis:\n" + shtepiAdres + "\n"; rezultat += "Adresa shkolles:\n" + shkollAdres;
public class Adresa { private String rruga, qytet, shteti;
Page 207 of 275
private long numri;
//----------------------------------------------------------------- // Constructor: Vendos adresen me vlerat specifike. //----------------------------------------------------------------- public Adresa (String rruga, String qytet, String shteti, long numri) { this.rruga = rruga; this.qytet = qytet; this.shteti = shteti; this.numri = numri; }
//----------------------------------------------------------------- // Kthen pershkrimin e objektit Adresa. //----------------------------------------------------------------- public String toString() { String resultat;
resultat = rruga + "\n"; resultat += qytet + ", " + shteti + " " + numri;
return resultat; } }
Page 208 of 275
Pr kt shembull n vazhdim po japim gjithashtu dhe diagramin UML ku tashm ju keni njohurit e duhura pr ta kuptuar at.
Fig. 16. 1 Diagrama UML pr shembullin n Programi 16. 3.
Page 209 of 275
USHTRIME DHE PROBLEMA
16.1 Krijo diagramn UML pr Programi 16. 1 dhe Programi 16. 2. 16.2 Ndryshoni Programi 16. 4 t klass Student n mnyr t till q pr constructor t prdorim formn this.
Page 210 of 275
Kapitulli 17
INTERFACES DHE ENUMERATED
Ne prdorim termin interface pr tu referuar tek nj metod publike prej s cils ne mund t bashkpunojm me nj objekt. Ky sht nj prkufizim i prgjithshm pr interfaces, por ai qndron po kaq i vrtet dhe pr prkufizimin e saj n programin Java. Ky kapitull do t vazhdoj me shjegimin e tipeve enumerated duke i shpjeguar ato si nj tip special klase.
17.1 Interfaces Nj interface sht nj grumbullim metodash abstrakte q nuk nuk mund t deklarohen fillimisht. Nj metod abstrakte sht nj metod e cila nuk ka kod n strukturn e saj. Q ta kuptoni kt shikoni klasn n Programi 17. 3 e cila tregon nj interface q quhet Kompleks. Ajo prmban dy metoda abstrakte: setKompleks dhe getKompleks. Nj metod abstrakte deklarohet si e till nga fjala e rezervuar n Java abstract, por nuk sht e nevojshme pr t, t deklarohet si e till kur ajo prdoret me interfaces. Klasa q implementon nj interface prdor fjaln e rezervuar n Java implements e ndjekur nga emri interface. Shikoni se si kjo prdoret n Programi 17. 2 dhe t dyja metodat setKompleks dhe getKompleks implementohen. Vreni se klasa Test prdor dhe metoda t tjera, pra interface garanton q klasa implementon disa metoda por ajo nuk e pengon at pr t pasur metoda t tjera. Gjithashtu nj klas mund t implementoj m shum se nj interface, duke i ndar ato me presje.
Page 211 of 275
Programi 17. 1 //******************************************************************** // Test.java Autor: Gjergji Shaska // // Perdorimi i klases qe implementon nje interface. //********************************************************************
import java.util.Scanner;
public class Test { //----------------------------------------------------------------- // Paraqet nje test te shkurter. //----------------------------------------------------------------- public static void main (String[] args) { Pyetje p1, p2, p3; String mundesi;
Scanner scan = new Scanner (System.in);
p1 = new Pyetje ("Kush eshte qyteti me i bukur i botes?", "Vlora"); p1.setKompleks (4);
Page 212 of 275
p2 = new Pyetje ("Kush eshte presidenti Shqiperis?", "z.Bamir Topi"); p2.setKompleks (10);
p3 = new Pyetje ("Kush eshte kryetari i bashkise se qytetit te Vlores?", "z.Shpetim Gjika"); p3.setKompleks (5);
//----------------------------------------------------------------- // Vendos nivelin kompleks per kete pyetje. //----------------------------------------------------------------- public void setKompleks (int nivel) { kompleksLevel = nivel; }
//----------------------------------------------------------------- // Kthen nivelin kompleks per kete pyetje. //----------------------------------------------------------------- public int getKompleks() {
//----------------------------------------------------------------- // Kthen pergjigjen per kete pyetje. //----------------------------------------------------------------- public String getAnswer() { return pergjigje; }
//----------------------------------------------------------------- // Nese pergjigja eshte e sakte ktheje te vertete. //----------------------------------------------------------------- public boolean pergjigjeSakt (String pergjiStudent) { return pergjigje.equals(pergjiStudent); }
Page 216 of 275
//----------------------------------------------------------------- // Kthen pergjigjen dhe pyetjen si string. //----------------------------------------------------------------- public String toString() { return pergjigje + "\n" + pyetje; } } Programi 17. 3 //******************************************************************** // Kompleks.java Autor: Gjergji Shaska // // Prezanton interface per nje objekt. //********************************************************************
public interface Kompleks { public void setKompleks (int kompleks); public int getKompleks(); } Libraria standarte n Java prmban compare interface q prcaktohet n java.lang.package. Compare interface prmban vetm nj metod compareTo e cila merr nj objekt si parametr dhe kthen nj integer. Shikoni kodin n vazhdim, nse vlera e compareTo sht negative ather x sht m i vogl se y, nse vlera e compareTo sht zero ather x sht i barabart me y dhe nse vlera e compareTo sht pozitive ather x sht m i math se y. if (x.compareTo(y) < 0) System.out.println (x eshte me i vogel se y);
Page 217 of 275
17.2 Enumerated Enumerated sht nj tip i veant klase ku vlerat e saj jan objekte. Shikoni kodin n vazhdim se si nj klas enumerate deklarohet. enum Ditet {hene, marte, merkur, enjte, premte, shtune, diele} Nse gjat programit ne do t deklarojm nj variabl, le t themi psh variabln dita ather ajo do t deklarohet n formn: Ditet dita; N kte rast variabla dita mund ti referohet vetm vlerave t ndodhura n Ditet, pra ajo mund t marri vetm vlerat: hene, marte, merkur, enjte, premte, shtune dhe diele. Programi 17. 4 deklaron nj tip enumerate duke prdorur fjaln e rezervuar n Java enum. Pra si e shpjeguam m lart variabla ditet mund t marri si vler vetm nj nga ditet e javes nga e hna n t dieln. do vler n listn e vlerave t enumerated prfshihet n constructor, e cila e kalon at n nj karakter string q stored n variabln numer.
public enum Ditet { hene ("E Hena eshte dita e pare e javes."), marte ("E Marta eshte dita e dyte e javes."), merkur ("E Merkura eshte dita e trete e javes."), enjte ("E Enjtja eshte dita e katert e javes."),
Page 218 of 275
premte ("E Premtja eshte dita e peste e javes."), shtune ("E Shtuna eshte dita e gjashte e javes."), diele ("E Diela eshte dita e shtate e javes.");
private String numer;
//----------------------------------------------------------------- // Constructor: Vendos secilen vlere ne nje string. //----------------------------------------------------------------- Ditet (String ditet) { numer = ditet; }
//----------------------------------------------------------------- // Kthe numer mesazhin per kete vlere. //----------------------------------------------------------------- public String getNumer() { return numer; } } Programi 17. 5 //******************************************************************** // Java.java Autor: Gjergji Shaska // // Perdorimi i enumerated.
public class Java { //----------------------------------------------------------------- // Merre vlerat e enumerated Ditet. //----------------------------------------------------------------- public static void main (String[] args) { for (Ditet ditet : Ditet.values()) System.out.println (ditet + "\t" + ditet.getNumer()); } } Output---------------------------------------------------------------------------------------- hene E Hena eshte dita e pare e javes. marte E Marta eshte dita e dyte e javes. merkur E Merkura eshte dita e trete e javes. enjte E Enjtja eshte dita e katert e javes. premte E Premtja eshte dita e peste e javes. shtune E Shtuna eshte dita e gjashte e javes. diele E Diela eshte dita e shtate e javes.
Page 220 of 275
USHTRIME DHE PROBLEMA
17.1 Shkruaj kodin ku testi pr studentt do t ket pes pyetje. 1) Kush eshte kryeqyteti i Italis? 2) Kush eshte kryeqyteti i Francs? 3) Kush eshte kryeqyteti i Gjermanis? 4) Kush eshte kryeqyteti i Spanjs? 5) Kush eshte kryeqyteti i Anglis? 17.2 Modifiko kodin n Programi 17. 4 n mnyr t till q output t printoj vetm emrat e stinve dhe t prdoret enumerate: enum Stint { pranvera, vera, vjeshta, dimri} 17.3 Studioni lidhjet e klasave dhe metodave pr UML n vazhdim dhe formuloni nj program ku t tregoni se far funksioni do t kryej programi. Shpjegoni do klas, variabl dhe metod t diagrams UML.
Page 221 of 275
Kapitulli 18
PRDORIMI I ARRAYS
Gjat programimit ne shpesh duam ti organizojm objektet n mnyr t till q t jet kollaj t ket akses dhe ti modifikosh ato. Kjo ide sht shum e rndsishme kur ne duam t menaxhojm nj numr t math vlerash, le t themi psh 1000 apo m shum t dhna. N kt kapitull ne do t flasim pr arrays t cilat jan komponent baz jo vetm pr gjuhn Java por pr shumicn e gjuhve t nivelit t lart.
18.1 Deklarimi dhe Prdorimi i Arrays Nj array sht nj kontenier i cili mban nj numr t caktuar vlerash. Array jan shum t prdorshme jo vetm n gjuhn Java por dhe n shumicn e gjuhve t nivelit t lart, pasi ato na lejojn ne si programus t kemi akses dhe modifikojm t dhnat. do vler e array quhet element dhe do numr q korespondon me secilin element quhet index. Referohuni Fig. 18. 1 pr t kuptuar m mir iden dhe prbrsit e array. N kt array emri i saj sht numer, elementt e array jan 37, 23, ......79, dhe index pr array jan 0, 1, . . . 9. Vini re numrin pr indexin e par i cili sht 0 dhe numrin pr indexin e fundit i cili sht 9, pra nj m pak nga numri i elementve t arrays i cili sht 10. Pr ta prgjithsuar kt ide themi se indexi pr do array fillon me 0 dhe mbaron me n-1, ku n sht numri i elementeve t array. Vini re kodin e mposhtm se si shkruhet pr elementin e dyt t array t quajtur numr. numr [1] = 23;
Page 222 of 275
vlera numr 37 23 56 36 54 13 21 89 65 79 0 1 2 3 4 5 6 7 8 9 index Fig. 18. 1 Nj array e quajtur numr. Arrays jan objekte t cilt duhen deklaruar. Si dhe deklarimet e variablave arrays kan dy pjes: tipin dhe emrin. Vreni m posht se si array me emrin numri deklarohet n mnyra t ndryshme. int[] numri; byte[] numri; short[]numri; long[]numri; float[]numri; double[]numri; boolean[]numri; char[]numri; String[]numri;
T gjitha vlera e ruatura n nj array kan t njjtin tip, q do t thot psh se vlerat e array duhet t jen t gjitha int ose byte por ato nuk mund t jen dhe int dhe byte. Madhsia e array e cila tregohet me vlern brenda kllapave nuk sht pjes e tipit t saj. Nse do i referoheshim shembujve q dham m sipr madhsia e ktyre array nuk sht e prcaktuar. Nse do t donim nj array me madhsi t caktuar, le t themi me 10 element, ather do t kishim deklarimin: int [10]. Gjithashtu nj tjetr mnyr pr t deklaruar array sht duke i vendosur kllapat pas emrit t array si: int numri []. Kjo mnyr compilet pa gabime n programin Java, por kjo mnyr nuk sht shum e prdorshme dhe ne do t mundohemi t mos e prdorim. Nj prej mnyrave pr t krijuar nj array, e cila sht dhe m e prdorshmja sht duke prdorur fjaln e rezervuar n Java new. Fjalia e mposhtme tregon se si nj array e tipit integer me 10 element krijohet. int [] numri = new int [10]; Fjalit n vazhdim tregojn se si mund t vendosim vlera n elementt e nj array. Pra n elementin e par sht vendosur 10, n t dytin 20, n t tretin 30 e kshtu me radh. numri[0] = 10; // elementi pare numri [1] = 20; // elementi dyte numri [2] = 30; // etj
Page 223 of 275
Nj tjetr mnyr pr t deklaruar nj array sht duke i deklaruar t gjitha vlerat e saj si nj list. Ideja sht e njjt me deklarimin e nj variable, vetm se array krkon disa vlera pr tu deklaruar. N kt rast numri i elementve t saj do t jet numri i vlerave t vendosura n array, duke ju referuar shembullit t mposhtm themi se kemi 4 element. Vini re llojin e kllapave t prdorura n kt rast. int [] numri = { 35, 43, 30, 40}; Le t shohim nj shembull t thjesht n Programi 18. 1 ku klasa List krijon nj erray me 10 element, vendos n secilin element nga nj vler dhe i printon kto vlera.
Programi 18. 1 //******************************************************************** // List.java Autor: Gjergji Shaska // // Perdorimi i array duke vendosur cdo vlere. //********************************************************************
class List { public static void main(String[] args) { int[] list; // deklaron nje array of integers
list = new int[10]; // Madhesia e array eshte 10 elements
list[0] = 10; // vendos vleren 10 per elementin e pare list[1] = 20; // vendos vleren 20 per elementin e dyte list[2] = 30; // etj list[3] = 40; list[4] = 50; list[5] = 60;
// Printon vlerat per secilin index System.out.println("Elementi per index 0: " + list[0]); System.out.println("Elementi per index 1: " + list[1]); System.out.println("Elementi per index 2: " + list[2]); System.out.println("Elementi per index 3: " + list[3]); System.out.println("Elementi per index 4: " + list[4]); System.out.println("Elementi per index 5: " + list[5]); System.out.println("Elementi per index 6: " + list[6]); System.out.println("Elementi per index 7: " + list[7]); System.out.println("Elementi per index 8: " + list[8]); System.out.println("Elementi per index 9: " + list[9]); } } Output---------------------------------------------------------------------------------------- Elementi per index 0: 10 Elementi per index 1: 20 Elementi per index 2: 30 Elementi per index 3: 40 Elementi per index 4: 50 Elementi per index 5: 60 Elementi per index 6: 70
Page 225 of 275
Elementi per index 7: 80 Elementi per index 8: 90 Elementi per index 9: 100 Nj tjetr shembull prsri i thjesht jepet n Programi 18. 2, ku programi krijon nj array t quajtur list q ka 15 element. do her q for loop ekzekutohet vlerat rriten me 5, prve elementit t tet dhe t nnt ku vlerat e tyre ndryshohen n kod (vini re kodin pr kt). Programi 18. 2 //******************************************************************** // ForArray.java Autor: Gjergji Shaska // // Deklarimi dhe perdorimi i array. //********************************************************************
public class ForArray { //----------------------------------------------------------------- // Krijon nje array, vendos vlerat, modifikon dy vlera dhe i print. //----------------------------------------------------------------- public static void main (String[] args) { final int MAKSIMUM = 15, SHUMEZO = 5;
int[] list = new int[MAKSIMUM]; // deklaron array me emrin list
// Vlerat e array for (int index = 0; index < MAKSIMUM; index++) list[index] = index * SHUMEZO;
Page 226 of 275
list[7] = 77; // ndryshon vleren e elementit te shtate list[8] = 88; // ndryshon vleren e elementit te shtate // Printon vlerat e array for (int vlera : list) System.out.print (vlera + " "); } } Output---------------------------------------------------------------------------------------- 0 5 10 15 20 25 30 77 88 45 50 55 60 65 70 Programi Programi 18. 3 lexon 5 integers t hedhur n program nga prdoruesi dhe i printon kta numra duke filluar nga fundi. Vini re prdorimin e dy for loop: e para lexon duke filluar nga index 0, 1, 2, 3, 4 dhe tjetra lexon duke filluar nga indexi m i madh 4, 3, 2, 1, 0. Programi 18. 3 //******************************************************************** // Mbrampsht.java Autor: Gjergji Shaska // // Demostrimi i index array. //********************************************************************
import java.util.Scanner;
public class Mbrampsht { //----------------------------------------------------------------- // Lexon numrat e futur nga perdorusi, i ruan ne nje array, // printon ata mbrapsht.
Page 227 of 275
//----------------------------------------------------------------- public static void main (String[] args) { Scanner scan = new Scanner (System.in);
double[] numerat = new double[5];
System.out.println ("Madhesia e array eshte: " + numerat.length);
for (int index = 0; index < numerat.length; index++) { System.out.print ("Fusni numrin " + (index+1) + ": "); numerat[index] = scan.nextDouble(); }
System.out.println ("Numrat mbrapsht jane:");
for (int index = numerat.length-1; index >= 0; index--) System.out.print (numerat[index] + " "); } } Output---------------------------------------------------------------------------------------- Madhesia e array eshte: 5 Fusni numrin 1: 32.47 Fusni numrin 2: 23 Fusni numrin 3: 54.3 Fusni numrin 4: 67
18.2 Objektet Arrays Deri tani ne prdorm array pr t ruajtur data primitive si psh integers, por nj array mund t ket objekte ku secili prej tyre mund t ket disa variabla dhe metoda q i prdor kta objekte. Mbani mend se nj array n vetvete sht nj objekt, pra kur ne ruajm nj objekt n nj array secili element sht nj objekt n vetvete. Shikoni Programi 18. 4 i cili krijon nj array me objekte Nota dhe i printon ato. N kt klas kemi krijuar nj list array me emrin nota duke prdorur fjaln new. T gjitha pjest n Programi 18. 5 tashm jan t njojtura pr ju, kshtu q ne nuk po vazhdojm me shpjegimin e pjesve prbrse t tij. Ky program prezanton notat e nxnsve t klass s par fillore dhe kthen variablat notat dhe min. Programi 18. 4 //******************************************************************** // Mesatarja.java Autor: Gjergji Shaska // // Perdorimi i objektit array. //********************************************************************
public class Mesatarja { //----------------------------------------------------------------- // Krijon nje objekt Nota dhe e printon. //----------------------------------------------------------------- public static void main (String[] args) { Nota[] nota =
Page 229 of 275
{ new Nota("Te lumte dora e vogel", 95), new Nota("Flamur", 90), new Nota("Duhet te permirsohesh", 70), new Nota("Dobet", 60), new Nota("Ngeles", 50) };
for (Nota shkronjaNota : nota) System.out.println (shkronjaNota); } } Output---------------------------------------------------------------------------------------- Te lumte dora e vogel 95 Flamur 90 Duhet te permirsohesh 70 Dobet 60 Ngeles 50
//----------------------------------------------------------------- // Constructor: Vendos objektin Nota me noten specifike. //----------------------------------------------------------------- public Nota (String notat, int min) { this.notat = notat; this.min = min; }
//----------------------------------------------------------------- // Kthen nje string te notave. //----------------------------------------------------------------- public String toString() { return notat + "\t" + min; }
//----------------------------------------------------------------- // Metoda vendos Notat. //----------------------------------------------------------------- public void setNotat (String emri) { notat = emri;
Page 231 of 275
}
//----------------------------------------------------------------- // Metoda vendos. //----------------------------------------------------------------- public void setMinimum (int posht) { min = posht; }
//----------------------------------------------------------------- // Metoda merr. //----------------------------------------------------------------- public String getName() { return notat; }
//----------------------------------------------------------------- // Minimum akses. //----------------------------------------------------------------- public int getMinimum() { return min; } }
Page 232 of 275
Le ta mbyllim kt kapitull me nj tjetr shembull disi m t vshtir por q prmbleth pothuajse t gjitha njohurit e msuara n kt kapitull pr array. Programi 18. 6 tregon klasn Muzik e cila prmban metodn kryesore q krijon, modifikon dhe ekzaminon nj CD. do CD q shtohet n kolleksion ka titullin, emrin e artistit, mimin pr CD dhe numrin. Programi 18. 7 tregon klasn CDMuzik e cila prmban nj array t objektit CD q prezanton koleksionin, numron CD n koleksion dhe mban madhsin e koleksionit array. Koleksioni array deklarohet n constructor CDMuzik. do her q nj CD shtohet n koleksion duke prdorur metodn addCD, nj objekt i ri CD krijohet dhe referenca e tij ruhet n koleksionin array. Programi 18. 6 //******************************************************************** // Muzik.java Autor: Gjergji Shaska // // Perdorimi i objekteve ne array. //********************************************************************
public class Muzik { //----------------------------------------------------------------- // Krijon nje objekt CDMuzik dhe shton some CD dhe i printon. //----------------------------------------------------------------- public static void main (String[] args) { CDMuzik muzik = new CDMuzik ();
System.out.println (muzik); } } Output---------------------------------------------------------------------------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Koleksioni i CD
Numri CD: 4 Kostua Totale: $15.69 Kostua mesatare: $3.92
public class CDMuzik { private CD[] koleksion; private int numero; private double totalKost;
Page 235 of 275
//----------------------------------------------------------------- // Constructor: Krijon fillimishte nje koleksion boshe. //----------------------------------------------------------------- public CDMuzik () { koleksion = new CD[100]; numero = 0; totalKost = 0.0; }
//----------------------------------------------------------------- // Shton CD ne koleksion dhe rrit madhesin e // koleksion nese eshte e nevojshme. //----------------------------------------------------------------- public void addCD (String tituli, String artist, double kosto, int mban) { if (numero == koleksion.length) rritMadhesin();
koleksion[numero] = new CD (tituli, artist, kosto, mban); totalKost += kosto; numero++; }
//----------------------------------------------------------------- // Kethen nje raportim ku pershkruan koleksion CD.
Page 236 of 275
//----------------------------------------------------------------- public String toString() { NumberFormat fmt = NumberFormat.getCurrencyInstance();
String report = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; report += "Koleksioni i CD\n\n";
for (int cd = 0; cd < numero; cd++) report += koleksion[cd].toString() + "\n";
return report; }
//----------------------------------------------------------------- // Rrite kapacitetin e koleksionit duke krijuar nje array te // madhe dhe kopiuar koleksionin ekzistus ne te. //----------------------------------------------------------------- private void rritMadhesin () { CD[] madhesi = new CD[koleksion.length * 2];
Page 237 of 275
for (int cd = 0; cd < koleksion.length; cd++) madhesi[cd] = koleksion[cd];
public class CD { private String titulli, artist; private double kosto; private int mban;
//----------------------------------------------------------------- // Krijon nje CD te re me informacionin special. //----------------------------------------------------------------- public CD (String emri, String kengetari, double cmimi, int numMban)
18.1 Ndryshoni kodin n Programi 18. 1 n mnyr t till q t kemi nj array me 15 element dhe ata t printohen n t njjtin rresht. 18.2 Bazohuni n kodin n Programi 18. 2 pr t krijuar nj array me 20 element ku secili t rritet me 2 nga elementi paraardhs. 18.3 Duke u bazuar n Programi 18. 3 shkruani nj program ku 15 element t futur n program nga lexusi t printohen duke u lexuar nga fundi. 18.4 Ndryshoni kodin n Programi 18. 4 n mnyr t till q: Shkelqyshem - 95, Shume mire - 90, 8 80, Duhet prmirsim 70, 5 60, Ngel 50. 18.4 Zgjidhni shtat prej kngtarve tuaj m t preferuar dhe ndyshoni kodin n Programi 18. 6,Programi 18. 7 dhe Programi 18. 8 n mnyr q n output t marrim t dhnat pr CD e tyre. N output duhet t printohet gjithashtu: Koleksioni i CD t (emri juaj).
Page 241 of 275
Kapitulli 19
ARRAYS DY DIMENSIONENALE
N kapitullin 18 gjithka ne msuam pr arrays ishte pr arrays me nj dimension, q do t thot se ato tregonin nj list vlerash. N kt kapitull ne do t studiojm arrays me dy dimensione dhe do t japim vetm nj prshkrim t shkurtr pr arrays me shum dimensione, pasi ato jan disi m komplekse pr tu prfytyruar dhe nuk jan shum t prdorshme n programet e zakonshme.
19.1 Arrays dy Dimensionale Arrays dy dimensionale jan arrays t cilat kan vlera n dy dimensione t prfytyruara si rreshta dhe kollona, ose e thn ndryshe si array t arrays. N Fig. 19. 1 tregohet nj array e quajtur Iliri me dimesione 6 rreshta dhe 8 kollona, e cila n Java deklarohet si m posht dhe pr tju referuar nj elementi t veant vendosim brenda kllaps s par numrin pr rreshtin dhe brenda kllaps s dyt numrin pr kollonn: int Iliri = [6][8] // deklarimi int Iliri = [2][3] // referohet numrit 55 0 1 2 3 4 5 6 7 0 1 Iliri 2 55 3 5 Fig. 19. 1 Arrays dy dimensionale.
Page 242 of 275
Programi 19. 1 tregon nj prdorim t thjesht t nj array dy dimensionale t puajtur emrat. Klasa DyArray nuk bn gj tjetr por deklaron nj array dhe printon elementt e saj. Programi 19. 1 //******************************************************************** // DyArray.java Autor: Gjergji Shaska // // Nje perdorim i thjeshte i dy array. //********************************************************************
class DyArray { public static void main(String[] args) { String[][] emrat = {{"Gjergji ", "Ilir "}, {"Shaska", "Xhomaqi"}}; System.out.println(emrat[0][0] + emrat[1][0]); // Gjergji Shaska System.out.println(emrat[0][1] + emrat[1][1]); // Ilir Xhomaqi } } Output---------------------------------------------------------------------------------------- Gjergji Shaska Ilir Xhomaqi N Programi 19. 2 jepet nj shembull ku fillimisht nj array me dy dimensione sht deklaruar si integer. Nested for lops prdoren n program pr t krijuar tabeln dhe pr ta printuar at. Vini re se si for loop e brendshme mbush vlerat pr kollonat dhe for loop e jashtme mbush vlerat pr rreshtat. Programi 19. 2 //******************************************************************** // DyDimensione.java Autor: Gjergji Shaska
Page 243 of 275
// Perdorimi i nje array me dy dimensione. //********************************************************************
public class DyDimensione { //----------------------------------------------------------------- // Krijon nje array me dy dimensione, e mbush ate me // vlera integers dhe i printon. //----------------------------------------------------------------- public static void main (String[] args) { int[][] tabela = new int[6][8];
// Vendo vlerat ne tabele for (int rresht=0; rresht < tabela.length; rresht++) for (int kollon=0; kollon < tabela[rresht].length; kollon++) tabela[rresht][kollon] = rresht * 2 + kollon;
Output---------------------------------------------------------------------------------------- 0 1 2 3 4 5 6 7 2 3 4 5 6 7 8 9 4 5 6 7 8 9 10 11 6 7 8 9 10 11 12 13 8 9 10 11 12 13 14 15 10 11 12 13 14 15 16 17 Programi 19. 3 prdoret nga nj kompani e cila prodhon raki dhe krkon t testoj kush nga prodhimet e saj plqehet m shum. Kompania ka hedhur n treg katr lloj rakish t cilat paraqiten n array nga rreshtat, ndrsa personat e testuar paraqiten nga kollonat. Vini re se kompania ka testuar 10 persona t cilt kryejn vlersimin duke e vlersuar secilin lloj rakie me notat nga 1 n 5. Programi llogarit dhe printon mesataren pr secilin lloj rakie dhe mesataren e pikve q ka dhn secili person. Programi 19. 3 //******************************************************************** // Provon.java Autor: Gjergji Shaska // // Perdorimi i nje array me dy dimensione. //********************************************************************
import java.text.DecimalFormat;
public class Provon { //----------------------------------------------------------------- // Pecakton dhe printon mesataren e secilit rresht (raki) dhe // seciles kollone (personi qe e provon).
19.2 Arrays Shumdimensionale Nj array mund t ket nj, dy, tre apo shum dimensione. Pr t prfytyruar array me dy dimensione sht kollaj, po ashtu dhe me tre dimensione prfytyrojeni n formn e nj kubi, por me katr apo m shum dimensione sht disi e vshtir t prfytyrohet. Por shpesh ato jan t nevojshme n programim si p.sh. nse duam t krijojm nj program pr t gjith universitetet e Evrops, do t ishte nj ide e mir prdorimi i nj array me katr dimensione. Dimensioni i par prezanton shtetin, dimensioni i dyt prezanton universitetet n secilin shtet, dimensioni e tret prezanton fakultetet n secilin universitet dhe dimensioni i katrt prezanton departamentet n secilin fakultet. Programet t cilt prdorin array shumdimensionale krkojn nj kujdes t veant nga programusi dhe shpesh programust nse kan mundsi plqejn ta shmangin prdorimin e tyre. Nse do i referoheshim prsri shembullit t msiprm ne mund t skiconim nj program pa prdorur si e treguam m sipr nj array me katr dimensione. Secili shtet mund t prezantohej me nj objekt, i cili mund t ket nj array pr t ruajtur informacionin rreth secilit universitet dhe kshtu t vazhdoj dizenjimi n vazhdim. Nj objekt n nj list array sht i njjt me nj array, por ajo mund ta ndryshoj madhsin sipas nevojs, q do t thot se ne mund t shtojm dhe t lvizim element nga lista. Programi 19. 4 fillimisht krijon nj list array t quajtur anetar, pastaj lviz nga lista qytetin Durresi dhe e printon rezultatin. Vini re se kur nj element lviz nga lista elementi q sht pas tij, n rastin ton Vlora z pozicionin e elementit q lviz nga lista. E njjta gj ndodhe dhe kur ne shtojm nj element n fjalit e kodit n vazhdim. Ne shtojm n list qytetin Fieri dhe n t njjtn mnyr elementi q n rastin ton sht Vlora lviz nj pozicion q t krijoj vend pr qytetin Fieri. Programi 19. 4 //******************************************************************** // Qytetet.java Autor: Gjergji Shaska // // Perdorimi i objektit ArrayLis.
public class Qytetet { //----------------------------------------------------------------- // Ruan dhe modifikon nje list te qyteteve. //----------------------------------------------------------------- public static void main (String[] args) { ArrayList anetar = new ArrayList();
int pozicion = anetar.indexOf ("Durresi"); anetar.remove (pozicion);
System.out.println (anetar); System.out.println ("Per index 2: " + anetar.get(2));
Page 249 of 275
anetar.add (2, "Fieri"); System.out.println (anetar); System.out.println ("Madhesia e anetarve: " + anetar.size()); } } Output---------------------------------------------------------------------------------------- [Tirana, Durresi, Elbasani, Vlora] [Tirana, Elbasani, Vlora] Per index 2: Vlora [Tirana, Elbasani, Fieri, Vlora] Madhesia e anetarve: 4
Page 250 of 275
USHTRIME DHE PROBLEMA
19.1 Bazuar n Programi 19. 1 printo emrat dhe mbiemrat e pes personave ku printimi t filloj me emrin tuaj. 19.2 Krijoni nj matric ku kollonat t rriten me 2 dhe rreshtat t rriten me 2. 19.3 Kush sht personi q e ka vlersuar m shume rakin e par? Po rakin e katrt? Personi i dhjet k raki ka vlersuar m shum? 19.4 Ndryshoni kodin n Programi 19. 4 n mnyr q t lvizni nga lista qytetin Elbasani dhe t shtoni qytetin Shkodra.
Page 251 of 275
PROJEKTI 2 ***************************************************************** Ju duhet t plotsoni kodin pr programin n vazhdim n mnyr q ai t funksionoj n rregull. Pr t marr t plot iden se far ky program duhet t bj ne po u japim dhe output n fund t kodit pr kt program. do student ka nj numr t quajtur n program id dhe studentt duhet t renditen sipas notave duke filluar me A. Nse dy student kan nota t njjta ather ata renditen sipas numrit (id) m t madh. Pasi ta plotsoni kodin printojeni at dhe ktheheni pr tu korigjuar. Kodi projekt 2.1 //******************************************************************** // GradeBook.java Autor: Gjergji Shaska // //********************************************************************
// beji studentet private per ti encapsulate me mire private Student[] students;
GradeBook ()
Page 252 of 275
{
students = new Student[7];
students[0] = new Student ( 2345 , "A" ); students[1] = new Student ( 1113 , "C" ); students[2] = new Student ( 7504 , "B" ); students[3] = new Student ( 1140 , "C" ); students[4] = new Student ( 4001 , "B" ); students[5] = new Student ( 2002 , "D" ); students[6] = new Student ( 5000 , "A" );
}
public String toString () { String result = ""; for ( int i = 0; i < students.length; i++ ) result += students[i] + "\n"; return result; }
public String toHTML () { String result = "<HTML>"; for ( int i = 0; i < students.length; i++ )
Page 253 of 275
result += students[i] + "<BR>"; result += "</HTML>"; return result; }
//Sort Funksion //Protects studentet public void sort () { GradeBook.selectionSort ( students ); }
public static void selectionSort ( Comparable[] list ) { int min; Comparable temp;
for ( int index = 0; index < list.length - 1; index++ ) { min = index; for ( int scan = index + 1; scan < list.length; scan++ ) if ( list[scan].compareTo ( list[min] ) < 0 ) min = scan;
// Nderron vlerat temp = // vendos kodin tuaj ketu
// Nje loop e cila pyt perdorusin nese do versioni grafik apo jo // pranon vetem y , Y , N or n do { System.out.println ( "Doni te perdorni versioni grafik. Y\\N" ); answer = scan.nextLine (); if ( answer.equalsIgnoreCase ( "Y" ) ) bGraphical = true; else if ( !answer.equalsIgnoreCase ( "N" ) ) System.out.println ( "Ju lutem shtyp Y or N" ); if ( answer.equalsIgnoreCase ( "y" ) || answer.equalsIgnoreCase ( "n" ) ) bAnswered = true; } while ( !bAnswered );
Page 255 of 275
if ( bGraphical ) { JFrame gradeBookFrame = new JFrame ( "Grade Book" ); gradeBookFrame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
// Ndryshon variablat ne private per te siguruar encapsulation. private int id; private String grade;
Student ( int id , String grade ) { this.id = id; this.grade = grade; }
// Krahaso kete per te kryer funksionin. public int compareTo ( Object obj ) { Student that = (Student)obj; int rtnValue = grade.compareTo ( that.getGrade ( )); if (rtnValue == 0) { if // vendos kodin tuaj ketu rtnValue = -2; else if // vendos kodin tuaj ketu
Page 259 of 275
rtnValue = 2; } return rtnValue; }
// Funksion per encapsulate student. public String getGrade() { return // vendos kodin tuaj ketu }
// Funksion per encapsulate student. public int getID() { return // vendos kodin tuaj ketu }
public String toString () {
String result = id + " " + grade; return result; } } Output---------------------------------------------------------------------------------------- Doni te perdorni versioni grafik. Y\N n Perpara renditjes
Page 260 of 275
2345 A 1113 C 7504 B 1140 C 4001 B 2002 D 5000 A
Pas renditjes
2345 A 5000 A 4001 B 7504 B 1113 C 1140 C 2002 D
Mirupafshim
Page 261 of 275
Appendix I Java Operator Object-oriented Programming with Java (COP-2551) Tabela e mposhtme tregon operatort n Java duke i reditur sipas ekzekutimit t tyre.
* / % Multiplication/division/modulus + - Addition/subtraction << >> Bitwise shift left, Bitwise shift right < <= > >= instanceof Relational less than/less than or equal to Relational greater than/greater than or equal to Type comparison
== != Relational is equal to/is not equal to & Bitwise AND ^ Bitwise exclusive OR | Bitwise inclusive OR && Logical AND || Logical OR ?: Ternary conditional = += -= *= /= %= &= ^= |= <<= >>= Assignment Addition/subtraction assignment Multiplication/division assignment Modulus/bitwise AND assignment Bitwise exclusive/inclusive OR assignment Bitwise shift left/right assignment
Page 262 of 275
Appendix II Java application with Eclipse Ky kapitull do t shpjegoj shkurtimisht se si t krijojm nj aplikim duke prdorur Eclipse. Qllimi i ktij kapitulli sht tju tregoj ju hapat e par t krijimit t nj aplikimi, pasi ju do familjarizoheni me t gjat prdorimit t tij. Un fillova t prdor Eclipse pas disa vjetsh q po prdorja BlueJ i cili sht gjithashtu nj program i kollajshm pr tu prdorur. Por kur fillova t prdor Eclipse ishte vrtet nj ndryshim i madh pasi sht shum i kollajshm pr tu prdorur si dhe t krijon mundsin e shum lehtsirave gjat shkruajtjes s kodit. Eclipse funksionon pr Windows, Linux, Mac OSX, Solaris, AIX and HP-UX
Krijimi i nj projekti n Eclipse
N kt tutorial un jam bazuar n Eclipse 3.0. versionet e mvonshme t Eclipse mund t ndryshojn pak.
Krkohet Download Eclipse 3.0 ose versionet e mvonshme nga adresa. sht e krkuar Java 1.3 ose versionet e mvonshm. Nse ju nuk e keni at, download nj nga adresa: http://java.sun.com. Un po e quaj projektin tim javatools-demo por ju mund ta ndryshoni at n nj emr tjetr q ju dshironi. Fillimisht hapni Eclipse dhe vendosni nj path n nj folder e cila do t shrbej si workspace juaj. Kjo workspace sht nj folder e cila Eclipse prdor prt ruajtur kodin tuaj.
Page 263 of 275
Kliko mbi kutin "Use this as the default...", e cila gjithmon do t filloj Eclipse n workspace. Kur Eclipse starton ju do t shihni Welcome page
Page 264 of 275
Krijimi i nj projekti Mbylleni Welcome page, kliko djathtas n Navigator dhe zgjidh New->Project:
Zgjidh "Java Project" dhe "Next". Fusni emrin e projektit tuaj.
Kliko "Finish".
Page 265 of 275
Perspectives Eclipse ka nj numr perspectives t cilat ju mund ti shihni duke zgjedhur Window->Open Perspective->Other...
Prdorimi i nj alternative JRE N Package Explorer panel, kliko djathtas dhe zgjidh "Properties". Dialogu i hapur n Java Build Path kontrollon classpath.
Page 266 of 275
Si e vini re nga figua e msiprme e vetmja adres sht JRE System Library q tregohet n Libraries. N rastin tim nj Java 5.0 sht prdorur por ju mund t shihni nj JRE tjetr pasi varet nga far versioni t Java ju keni instaluar Sigurohuni q ju keni versionet e duhura t JDK ose JRE n kompjuterin tuaj, nse jo download and intalloje nga http://java.sun.com.
Fillimisht kliko n "Add Library":
Kliko "Next" dhe "Installed JREs..."
Page 267 of 275
Kliko "Add". Browse n JRE ose JDK k ju doni t prdorni dhe fusni nj emr.
Kliko "OK" dhe zgjidh JRE e re.
Kliko "OK" dhe "Finish". Prjojekti juaj tani do t compiled n JRE e re.
Page 268 of 275
Krijo source folders Ndrysho "Source" tab t Properties dialog.
Page 269 of 275
Projektet n Eclipse mund t prmbajn nj ose m shum source folders t cilat prmbajn Java source files. sht ide e mir q ne t ndajm tipet e ndryshme t kodit pasi kjo do ta bnte projektin ton m t leht pr t punuar.
Kliko "Add Folder" dhe type "src"
Pastaj kliko "Yes"
Kliko "Add Folder..." dhe "Create New Folder...". Kt her quaje folder "test". Kliko "OK" dyher. Vini re se ne tani kemi dy source folders.
Page 270 of 275
Klikoni "Order and Export" e cila tregon classpath. N rastin ton classpath do t prmbaj dy source folders plus JRE.
.
Import third party JARs Nse aplikimi juaj ka nj varsi n nj librari tjetr ju mund ta sillni at n projektin tuaj si nj JAR file dhe ta shtoni at n kt projekt. Krijoni nj folder t re n projektin tuaj si tregohet m posht:
Page 271 of 275
Quajeni folder "lib". Kliko djathtas n folder dhe zgjidh "Import..."
Page 272 of 275
Zgjidh "File System" dhe "Next". Browse n library dhe zgjidh JAR file.
Kliko "Finish" dhe ju duhet t shihni dika t ngjashme si:
Pr t add JAR n projektin classpath kliko djathtas n projekt dhe zgjidh "Properties". Shko n "Libraries" tab n "Java Build Path":
Page 273 of 275
Kliko "Add JARs..." dhe shko n imported JAR. Kliko "OK"
Page 274 of 275
Importimi i source code Importoni kodin duke klikuar djathtas n projekt dhe zgjidh "Import".
Nse kodi juaj sht ruajtur n nj JAR ose ZIP file, zgjidh "Zip file". Ndryshe zgjidh "File System". Krijimi i nj klase Nse ju doni t krijoni nj kod t ri Java, kliko djathtas n src dhe zgjidh "New->Class"
Page 275 of 275
Ju duhet t shihni nj klas t re t ngjashme me figurn e mposhtme. Kini parasysh se ju nuk duhet t ngatrroheni pasi prmbajtja do t jet e ndryshme pasi un kam krijuar disa projekte dhe klasa q jam duke u treguar sht e komplikuar. Nse vini re n krahun e majt gjenden emrat pr disa projekte t cilat un kam krijuar, n qendr t windows gjendet kodi i klass i cili sht duke u shfaqur dhe n krahun e djatht gjenden metodat e krijuara n kt klas.
Tani ju jeni gati t filloni dhe t shkruani kodin pr nj projekt. Hap pas hapi gjat ktij libri ju do t msoni se si t testoni kodin e nj klase gjat dhe pasi ta keni prfunduar s shkruari kodin pr nj apo disa klasa. Vini re se gjat shkrimit t kodit shpesh fjalt dalin t nnvizuara q do t thot se dika sht gabim dhe ju duhet ta rregulloni pasi kodi nuk do t compiled.