1 / 73

18. Tömbök 19. Rendezés, keresés, karbantartás 20. Vector és Collections osztályok

18. Tömbök 19. Rendezés, keresés, karbantartás 20. Vector és Collections osztályok. VI. Konténerek. 18. Tömbök 1. A tömb általános fogalma 2. Egydimenziós tömb 3. A tömb szekvenciális feldolgozása 4. Gyűjtés 5. Kétdimenziós tömb 6. Többdimenziós tömb 7. A tömb átadása paraméterként

morey
Download Presentation

18. Tömbök 19. Rendezés, keresés, karbantartás 20. Vector és Collections osztályok

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 18. Tömbök 19. Rendezés, keresés, karbantartás 20. Vector és Collections osztályok VI. Konténerek

  2. 18. Tömbök 1. A tömb általános fogalma 2. Egydimenziós tömb 3. A tömb szekvenciális feldolgozása 4. Gyűjtés 5. Kétdimenziós tömb 6. Többdimenziós tömb 7. A tömb átadása paraméterként 8. Parancssor-paraméter 9. Feladat – Szavazatkiértékelés VI. Konténerek

  3. Egydimenziós tömb Javában • Referencia típusú változó • Elemtípus • primitív • referencia • osztály • tömb

  4. Deklarálás <elemtípus>[] <tömbAzonosító>;vagy <elemtípus> <tömbAzonosító>[]; Létrehozás new <elemtípus> [<elemszám>] Indexelés <tömbAzonosító> [index] A tömb hossza <tömbAzonosító>.length

  5. 0. 1. 2. 3. 4. 0 10 20 30 40 iArray Példák int[] iArray = new int[5]; for (int i=0; i<iArray.length; i++) iArray[i] = i*10; double[] dArray = new double[20]; for (int i=0; i<dArray.length; i++) dArray[i] = Console.readDouble();

  6. 0. 1. 2. 3. sArray :String :String :String Panama Peru Pápua null String[] sArray = new String[4]; sArray[0] = "Panama"; sArray[1] = "Peru"; sArray[2] = "Pápua";

  7. Alapértelmezés szerinti kezdeti érték nullaszerű elemek Inicializáló blokk <elemtípus>[] <tömbazonosító> = {<érték1>, <érték2>, ...} Például: int[] iArray = {0,10,20,30,40}; char[] maganhangzok = {'a','e','i','o','u'}; boolean[] szep = {true,false};

  8. Értékadási kompatibilitás tömbök között t1=t2 megengedett, ha • Primitív elemtípus esetén t1 és t2 elemtípusa azonos; • Referencia elemtípus esetén t2 elemtípusa t1 elemtípusával azonos, vagy annak leszármazottja. Példa int[] iArray1 = {1,3,5,7}, iArray2 = {10,20}; Object[] oArray = null; String[] sArray = {"Get Back","Let It Be"};

  9. 0. 1. 2. 3. iArray1 1 3 5 7 0. 1. iArray2 10 20 Szintaktikailag helyes értékadások: iArray1 = iArray2; // iArray1 == {10,20}, iArray2 == {10,20} oArray = sArray; // oArray == {"Get Back","Let It Be"} Szintaktikailag helytelen értékadások: sArray = iArray; // Egyik elemei objektumok,másiké primitívek sArray = oArray; // Az Object-nek nem őse a String!

  10. Feladat – Szövegek Kérjünk be szövegeket a konzolról az üres szöveg végjelig. Ha nem tudunk már több szöveget tárolni, informáljuk erről a felhasználót! Végül írjuk ki a szövegeket először a bekérés sorrendjében, azután pedig visszafelé! import extra.*; public class Szovegek { String[] szovegek = new String[100]; int nSzoveg = 0;

  11. void beker() { String szoveg; while (true) { if (nSzoveg == szovegek.length) { System.out.println("Betelt"); break; } szoveg=Console.readLine(nSzoveg+1+". szöv:"); if (szoveg.equals("")) break; szovegek[nSzoveg] = szoveg; nSzoveg++; } }

  12. void kiirElore() { for (int i=0; i<nSzoveg; i++) System.out.print(szovegek[i]+" "); System.out.println(); } void kiirVissza() { for (int i=nSzoveg-1; i>=0; i--) System.out.print(szovegek[i]+" "); System.out.println(); } public static void main(String[ ] args) { Szovegek szovegek = new Szovegek(); szovegek.beker(); szovegek.kiirElore(); szovegek.kiirVissza(); } }

  13. Kétdimenziós tömb Deklarálás <elemtípus>[][] <tömbAzonosító>;vagy <elemtípus> <tömbAzonosító>[][]; Létrehozás new <elemtípus> [<méret1>][<méret2>] Indexelés <tömbAzonosító> [index1][index2]

  14. szamok szamok[1][3] 0. 1. 2. 3. 4. szamok[2] szamok[1] szamok[0] 2 1 12 7 53 56 0 0 0 -9 19 -2 2 21 26 Primitív elemtípusú kétdimenziós tömb int[][] szamok = new int[3][5];

  15. versenyzok 1 :Ember 0. 1. 2. :Ember versenyzok[0] :Ember versenyzok[1] :Ember versenyzok[2] versenyzok[3] versenyzok[1][2] Referencia elemtípusú kétdimenziós tömb Ember[][] versenyzok = new Ember[4][3];

  16. 2 versenyzok :Ember • 0. • 1. • 2. versenyzok[0] versenyzok[1] • versenyzok[2] versenyzok[0][0] = new Ember(...); versenyzok[3] Referencia elemtípusú kétdimenziós tömb Ember[][] versenyzok = new Ember[4]; versenyzok[0] = new Ember[3];

  17. A tömb átadása paraméterként • Feladat – Paraméter teszt • Írjunk eljárást, amely egy • int elemtípusú tömb elemeit kilistázza! • Object elemtípusú tömb elemeit kilistázza!

  18. public class ParamTeszt { static void kiir(int[] tomb) { for (int i=0; i<tomb.length; i++) System.out.print(tomb[i]+" "); System.out.println(); } static void kiir(Object[] tomb) { for (int i=0; i<tomb.length; i++) System.out.print(tomb[i]+" "); System.out.println(); }

  19. public static void main(String[] args) { int[] szamok1 = new int[2], szamok2 = new int[5]; szamok1[1] = 5; szamok2[0] = 99; szamok2[4] = -5; kiir(szamok1); kiir(szamok2); String[] szerzok1 = {"Mozart","Wagner","Beethoven"}; StringBuffer[] szerzok2 = new StringBuffer[2]; szerzok2[0] = new StringBuffer("Monteverdi"); szerzok2[1] = new StringBuffer("Corelli"); kiir(szerzok1); kiir(szerzok2); } } Az aktuális paraméter tetszőleges hosszú tömb lehet!

  20. Parancssor-paraméter Feladat – Program paraméter teszt Készítsen egy olyan programot, amely a program paramétereit kiírja a konzolra! Próbaként futtassa le a programot a következő három paraméterrel: java ProgParamTeszt Yellow Submarine Yesterday public class ProgParamTeszt { public static void main(String[] args) { for (int i=0; i<args.length; i++) System.out.println(args[i]); } }

  21. 19. Rendezés, keresés, karbantartás 1. Rendezés 2. Keresés 3. Karbantartás 4. Primitív elemek rendezése, keresése 5. String objektumok rendezése, keresése 6. Saját osztályú objektumok rendezése, keresése 7. Szövegek rendezett karbantartása VI. Konténerek

  22. Saját típusú objektumok rendezése, keresése Feladat – Hordókeresés Egy borász különböző méretű henger alakú hordókba tölti borait. Egy hordóra jellemző annak átmérője és magassága (cm-ben), ezek együttesen meghatározzák a hordó kapacitását (literben). A borász a hordók feltöltése után sorba rendezi a hordókat, hogy így könnyebb legyen majd egy adott méretű, illetve kapacitású hordót megtalálni. Írjunk a borásznak egy olyan programot, amely segíti a hordók kiválasztásában! A program elején hozzuk létre a hordókat, majd keressünk a hordósorban adott méretű, illetve kapacitású hordókat!

  23. hasonlítóHordó (átmérő,magasság) kapacitás (60,20) ?? (70,100) 385 equals()? (30,80) 57 (30,70) 49 (100,40) 314 (60,20) 57 • Rendezés: compareTo(), azaz kapacitás szerint • Keresés: equals(), azaz pontos méret szerint

  24. Kontener() kiir() indexOf(kap) indexOf(hasonlitoHordo) :Hordo :Hordo :HordoKereses :Kontener :Hordo Hordo() kapacitas() equals() compareTo() rendez() meretKereses() kapacitasKereses() Hordókeresés – Együttműködési diagram

  25. HordoKereses Kontener Hordo -hordok: Hordo[1000] -size: int -atmero: int -magassag: int HordoKereses() kapacitasKereses() meretKereses() +main() +Hordo() +kapacitas(): int +equals(hordo):boolean +compareTo(hordo):int +toString(): String +Kontener() +kiir() -rendez() +indexOf(hordo): int +indexOf(kap): int +indexOf(kap,index):int * kontener Hordókeresés – Osztálydiagram

  26. import extra.*; class Hordo { private int atmero, magassag; // cm-ben public Hordo(int atmero, int magassag) { this.atmero = atmero; this.magassag = magassag; } public int kapacitas() { // literben return (int)(Math.round(Math.pow(atmero/2.0,2) * Math.PI*magassag/1000)); }

  27. public boolean equals(Hordo hordo) { return (hordo.atmero == atmero) && (hordo.magassag == magassag); } public int compareTo(Hordo hordo) { return kapacitas()-hordo.kapacitas(); } public String toString() { return "\nAtmero:"+Format.right(atmero,6)+ " Magassag:"+Format.right(magassag,6)+ " Kapacitas:"+Format.right(kapacitas(),8); } } // Hordo

  28. class Kontener { private Hordo[] hordok = new Hordo[1000]; private int size=0; public Kontener() { int atmero, magassag; while (size<hordok.length && (atmero=Console.readInt("\nAtmero: "))!= 0) { hordok[size++] = new Hordo(atmero, Console.readInt("Magassag: ")); } rendez(); }

  29. public void kiir() { for (int i=0; i<size; i++) System.out.print(hordok[i]+" "); System.out.println(); }

  30. private void rendez() { for (int i=0; i<=size-2; i++) { int minIndex = i; for (int j=i+1; j<=size-1; j++) if (hordok[j].compareTo(hordok[minIndex])<0) minIndex = j; if (i != minIndex) { Hordo seged = hordok[i]; hordok[i] = hordok[minIndex]; hordok[minIndex] = seged; } } } kapacitások összehasonlítása i. és minIndex. elemcseréje

  31. // Adott méretű hordó keresése: public int indexOf(Hordo hordo) { for (int i=0; i<size; i++) { if (hordok[i].equals(hordo)) return i; } return -1; } // Adott kapacitású hordó keresése elölrõl: public int indexOf(int kap) { return indexOf(kap,0); }

  32. // Adott kapacitású hordó keresése az adott indextől: public int indexOf(int kap, int index) { for (int i=index; i<size; i++) { int iKap = hordok[i].kapacitas(); if (iKap == kap) return i; if (iKap > kap) return -1; } return -1; } } // Kontener

  33. public class HordoKereses { private Kontener kontener; public HordoKereses() { kontener = new Kontener(); kontener.kiir(); meretKereses(); kapacitasKereses(); }

  34. void meretKereses() { // Adott méretű hordók keresése int atmero, magassag; Hordo hasonlitoHordo; atmero = Console.readInt("\nAtmero: "); while (atmero!=0) { hasonlitoHordo = new Hordo(atmero, Console.readInt("Magassag: ")); int index = kontener.indexOf(hasonlitoHordo); if (index >= 0) System.out.println("Indexe: "+index); else System.out.println("Nincs ilyen elem"); atmero = Console.readInt("\nAtmero: "); } }

  35. // Kapacitások keresése: void kapacitasKereses() { int kap; while ((kap=Console.readInt("Ker. kapacitas: "))!=0) { int index = kontener.indexOf(kap); if (index >= 0) System.out.println("Indexe: "+index); else System.out.println("Nincs ilyen hordo"); } } public static void main(String[] args) { new HordoKereses(); } } // HordoKereses

  36. 20. Vector és Collections osztályok 1. A konténer funkciói általában 2. Vector osztály 3. Az equals metódus szerepe 4. A konténer elhagyása az UML diagramról 5. Interfészek – Collection, List, Comparable 6. Collections osztály 7. Feladat – Nobel díjasok 8. Feladat – Városok 9. Feladat – Autóeladás VI. Konténerek

  37. Object AnyClass +metódus A konténer funkciói általában add(element) remove(element) size() isEmpty() contains(element) get(i) :AnyClass kliens :Konténer :AnyClass . . . ((AnyClass)element).metódus :AnyClass element

  38. Vector osztály • Vektor = “változtatható méretű tömb” • A vektor mérete az elemek hozzáadásával automatikusan bővül • A vektor elemei indexelhetők • A vektor elemei rendezetlenek, lehetnek egyenlők Keresések, törlések az equals() szerint • Funkciók: • beszúrások (add) • törlések (remove) • keresések (indexOf) • A Vector implementálja a Collection interfészt

  39. initialCapacity capacityIncrement 0 1 2 3 4 size() capacity() :Ember :Ember :Ember :Ember :Ember A Vector bővítése Vector emberek = new Vector(4,3); for (int i=0; i<5; i++) emberek.add(new Ember(...));

  40. Konstruktorok (Vector) • Vector(initialCapacity: int, capacityIncrement: int) • Vector(initialCapacity: int) • Vector() • Vector(c: Collection)

  41. Lekérdezések (Vector) • size(): int • capacity(): int • isEmpty(): boolean • get(index: int): Object • contains(element: Object): boolean • containsAll(c: Collection): boolean • equals(obj: Object): boolean • toString(): String

  42. Módosítások, bővítések (Vector) • setSize(newSize: int) • set(index: int, element: Object): Object • add(element: Object): boolean • add(index: int, element: Object): boolean • addAll(c: Collection): boolean • addAll(index: int, c: Collection): boolean

  43. Törlések (Vector) • remove(element: Object): boolean • remove(index: int) : Object • removeAll(c: Collection): boolean • retainAll(c: Collection): boolean • clear()

  44. Keresések (Vector) • indexOf(obj: Object): int • indexOf(element: Object, index: int): int • lastIndexOf(obj: Object): int • lastIndexOf(obj: Object, index: int): int Feladat – Vector minta Próbáljuk ki egy String objektumokat tároló vektor mű-ködését! Küldjünk a vektornak különböző üzeneteket!

  45. // VectorMinta import extra.*; import java.util.*; public class VectorMinta { static void lista(String info,Vector v) { System.out.println("\n"+info); System.out.println("meret: "+v.size()); for (int i=0; i<v.size(); i++) System.out.println(i+". "+v.get(i)); }

  46. public static void main(String[] args) { Vector v = new Vector(); v.add(new String("Marci")); v.add(new String("Dani")); v.add(new String("Peti")); v.add(new String("Rudi")); lista("4 elemu vektor",v); // Marci Dani Peti Rudi if (v.contains("Peti")) { // true System.out.print("Peti benne van, "); System.out.println("indexe:"+v.indexOf("Peti")); }

  47. v.remove(2); lista("2. torolve",v); // Marci Dani Rudi v.remove("Rudi"); // a két Rudi egyenlő lista("Rudi torolve",v); // Marci Dani v.add(0,new String("Cili")); v.add(1,new String("Marci")); lista("Beszuras elore",v); // Cili Marci Marci Dani int n=v.size(); System.out.println("\nUtolso ket objektum kiirasa"); System.out.println(v.get(n-2)+" "+v.get(n-1)); // Marci Dani

  48. v.set(1,new String("Toni")); // Az eddigi 1. obj. elvész lista("1. elem atirasa Toni-ra",v); // Cili Toni Marci Dani Vector vv = new Vector(v); lista("vv vektor:",vv); // Cili Toni Marci Dani vv.clear(); lista("A vv vektor ures lett",vv); // (üres) vv.add(new String("Marci")); vv.add(new String("Lili")); vv.addAll(v); lista("Marci, Lili és a teljes v hozzáadása vv-hez",vv); // Marci Lili Cili Toni Marci Dani

  49. lista("v vektor:",v); // Cili Toni Marci Dani if (vv.containsAll(v)) // true System.out.println("\nvv tartalmazza v elemeit"); else System.out.println("\nvv nem taralmazza v elemeit"); vv.retainAll(v); lista("vv es v közös része:",vv); //Marci Cili Toni Marci Dani }

  50. Az equals metódus szerepe • Feladat – Törpeprogram • Emberek neveit és magasságait szeretnénk • nyilvántartani. A nyilvántartásban két egyforma nevű • ember nem szerepelhet! • Kérjük be konzolról a hét törpe nevét és magasságát(végjel: névnél Enter). • Listázzuk ki a törpéket a bevitel sorrendjében! • Keressünk meg egy adott nevű törpét, és írjuk ki a magasságát!

More Related