Objecs Firs Wih Java A Pracical Inroducion Using BlueJ 4. Grouping objecs Collecions och ieraors
Innehåll Collecions Loopar Ieraorer Arrays Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 2
Krave a gruppera objek Många illämpningar innehåller samlingar av objek: Filoax biblioekskaaloger Sudieadminisraiva sysem Anale elemen som lagras varierar elemen läggs ill elemen as bor Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 3
En personlig aneckningsbok Noiser kan lagras Man kan ia på en individuell nois Ingen begränsning på anale noiser Man kan å vea anale lagrade noiser Uorska projeke noebook1 Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 4
Klassbiblioek Användbara klasser Vi behöver ine skriva all själva Java kallar sina biblioek ör packages. A gruppera objek är e åerkommande behov. Pakee java.uil innehåller klasser som hjälper ill med dea Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 5
Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 6
Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 7
Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 8
Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 9
Överlagrad meod Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 10
Dokumenaionen ör klassen Noebook /** * Sore a new noe ino he noebook. * @param noe The noe o be sored. */ public void sorenoe(sring noe) noes.add(noe); Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 11
Dokumenaionen ör klassen Noebook /** * Sore a new noe ino he noebook. * @param noe The noe o be sored. */ public void sorenoe(sring noe) noes.add(noe); Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 12
impor java.uil.arraylis; /** *... */ public class Noebook // Sorage or an arbirary number o noes. privae ArrayLis noes; /** * Perorm any iniializaion required or he * noebook. */ public Noebook() noes = new ArrayLis(); Ger illgång ill exak denna klass i dea pake Varje noebook skall äga e objek = en lisa av noiser Skapa objeke (om)... Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 13
Objekssrukuren Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 14
Lägg ill en redje nois Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 15
Egenskaper hos en ArrayLis Uökar sin kapacie om de behövs Har en priva räknare nås via meoden size() Objeken är ordnade ( mängd) Dealjerna kring hur dea skös är dolda. Spelar de någon roll? Hindrar de oss rån a använda den? Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 16
Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 17
Använda sin collecion public class Noebook privae ArrayLis noes;... public void sorenoe(sring noe) noes.add(noe); Lägg ill en nois public in numberonoes() reurn noes.size(); Reurnerar anale noiser (delegaion).... Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 18
Indexens numrering Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 19
Häma u objek ur collecion Är index gilig? public void shownoe(in noenumber) i(noenumber < 0) // This is no a valid noe number. else i(noenumber < numberonoes()) Sysem.ou.prinln(noes.ge(noeNumber)); else Häma och skriv u noisen // This is no a valid noe number. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 20
Numreringen kan påverkas av uag Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 21
Sammananing Godycklig anal objek kan lagras Klassbiblioek illhandahåller uesade klasser Javas klass biblioek kallas packages. Klassen ArrayLis inns i pakee java.uil Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 22
Sammananing Elemen kan läggas in och as bor. Varje elemen har e index. Värde på index kan ändras om elemen as bor eller läggs ill. I ArrayLis är de vikigase meoderna add, ge, remove och size. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 23
Ieraion Vanlig a vi vill upprepa vissa ågärder e godycklig anal gånger. T.ex. Skriva u alla noiserna i aneckningsboken. Hur många är dom? De lesa programmeringsspråk har saser ör upprepning (loopar). Java har re slag av loop-srukurer. Vi börjar med while-loopen. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 24
While-loopens pseudokod While-loopens allmänna orm while nyckelord Boolsk es while(loop condiion) loop body Saser som ska upprepas Pseudokod ör a skriva u alla noiser while(de inns noiser kvar a skriva u) //skriv u näsa nois Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 25
i Java /** * Lis all noes in he noebook. */ public void lisnoes() in index = 0; while(index < noes.size()) Sysem.ou.prinln(noes.ge(index)); index = index + 1; Öka index med 1 Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 26
Ierera över en samling java.uil.ieraor Reurnerar e objek av klassen Ieraor Ieraor i = mycollecion.ieraor(); while(i.hasnex()) Meod i klassen ArrayLis //anropa i.nex() ör a å näsa objek //hanera objeke Meoder i Ieraor public void lisnoes() Ieraor i = noes.ieraor(); while(i.hasnex()) Sysem.ou.prinln(i.nex()); Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 27
Projeke aucion Projeke aucion yerligare e exempel. Två nya saker: Värde null. Casing. Används här ör a se ill a resulae rån ge har rä yp när de sparas i en variabel: Sring message = (Sring) noes.ge(0); Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 28
Booleska villkor Uryck som evalueras ill rue eller alse Komplexa uryck kan konsrueras mha. operaorer a > 0 && a < 10 Se appendix D (s.430) Prioriesordning Tabell D.1 (s.431) Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 29
Hur evalueras uryck? Prioriesordningen vikig! && har högre priorie an Gör sanningsabeller ör a vara säker! p q p && q p q p q s s s s Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 30
Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 31 Excercise 3.10 Skriv e uryck med de booleska variablerna a och b som är san när a och b är båda sanna eller båda alska. (a && b)!(a b) a && b b a s a b b a s s s!(a && b) b a s
Excercise 3.10 (a && b)!(a b) a b a && b!(a b) s s s s (a && b) (!a &&!b) Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 32
Sammananing Loop-srukurer gör a block av saser kan upprepas. while-loopen i Java konrollerar upprepningen m.h.a. e boolesk uryck. Collecion-klasser kan illhandahålla Ieraor-objek som örenklar ieraionen över samlingen. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 33
Samlingar med as sorlek Ibland ve man exak hur många elemen en samling har i örväg. De lesa programmerings språk har ensärskild yp med as sorlek: array. I Java kan man lagra både primiiva yper och objek i en array. Synaxen är speciell. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 34
Projeke weblog-analyzer En web-server lagrar ino om varje access underläar webmaserns arbee. Mes populära sidor. Belasning i iden. Hur mycke daa haneras. Trasiga reerenser. Analyserar accesser/imme. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 35
Daayp Skapa e array-objek public class LogAnalyzer privae in[] hourcouns; privae LogileReader reader; Variabel deklaraion (hourcouns har värde null) public LogAnalyzer() hourcouns = new in[24]; reader = new LogileReader();... Skapa array-objeke Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 36
hourcouns-array Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 37
Använda en array Hårda hakar används ör a nå e enskil elemen i arrayen: hourcouns[...] Index måse vara av ypen in Elemenen används som vanliga variabler. På vänser sida i en illdelning : hourcouns[hour] =...; I e uryck: adjused = hourcouns[hour] 3; hourcouns[hour] = hourcouns[hour] + 1; Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 38
or-loopen Liknar while-loopen. Används ör a upprepa e ix anal gånger. Oa ör a ierera över en array. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 39
or-loopen i pseudo-kod Allmänn orm ör or-loopen or(iniialisering; villkor; eer-block ågärd) saser som skall upprepas mosvarande while-loop iniialisering; while(villkor) saser som skall upprepas eer-block ågärd Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 40
E exempel i Java or-loop version or(in hour = 0; hour < hourcouns.lengh; hour++) Sysem.ou.prinln(hour + ": " + hourcouns[hour]); While-loop version in hour = 0; while(hour < hourcouns.lengh) Sysem.ou.prinln(hour + ": " + hourcouns[hour]); hour = hour + 1; Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 41
Sammananing Arrayer lämpliga ör samlingar av ix sorlek Arrayer har speciell synax. or-loopar e alernaiv ill whileloopar när anale upprepningar är kän. or-loopar används oa ör a ierera över arrayer. Objecs Firs wih Java - A Pracical Inroducion using BlueJ, David J. Barnes, Michael Kölling 42