1 / 109

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

collin
Télécharger la présentation

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. A program paraméterei 9. Feladat – Szavazatkiértékelés VI. Konténerek

  3. Például: hőmérs: number[hó:1..12] hó 1. 2. 3. ... 12. hőmérs 12 15 14 22 hőmérs[3]==14 A tömb általános fogalma • Azonos típusú elemek sorozata • Az elemek száma előre rögzített • Az elemek indexelhetők (sorszámozhatók)

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

  5. 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

  6. 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();

  7. 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";

  8. 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};

  9. É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"};

  10. 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!

  11. 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;

  12. 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++; } }

  13. 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(); } }

  14. DobóKocka -n: int = 6{kocka oldalszáma} -tulaj: String -felül: int {aktuális dobás} -dobások: int[n+1] {index 1..n} DobásStatisztika 2 +main(...) +DobóKocka(tulaj:String) +dobás(): int +átlag(): double +toString(): String Feladat – Dobás-statisztika Két ember, Bush és Gates dobókockával versenyez: saját kockájukkal mindketten 10-szer dobnak, és amelyiküknek az átlaga jobb, az nyer. A dobásokat véletlenszám-generátorral szimuláljuk! A verseny végén írjuk ki mindkét versenyző nevét, és azt, hogy hány darab 1-es, 2-es ... 6-os dobásuk volt, valamint dobásaiknak átlagát!

  15. import extra.*; class DoboKocka { private static int n = 6; private String tulaj; private int felul; private int[] dobasok = new int[n+1]; public DoboKocka(String tulaj) { this.tulaj = tulaj; felul = 1; } public int dobas() { felul=(int) (Math.random() * n + 1); dobasok[felul]++; // gyűjtés return felul; // a dobott értéket visszaadja }

  16. public double atlag() { int osszeg=0, dobasSzam=0; for (int i=1; i<=n; i++) { dobasSzam += dobasok[i]; osszeg += dobasok[i]*i; } return osszeg*1.0/dobasSzam; } public String toString() { String str=tulaj; for (int i=1; i<=n; i++) str = str+" "+dobasok[i]; return str+" Atlag: "+atlag(); } }

  17. public class DobasStatisztika { public static void main(String[ ] args) { final int DOBASSZAM = 10; DoboKocka d1 = new DoboKocka("Bush "); DoboKocka d2 = new DoboKocka("Gates"); for (int i=1; i<=DOBASSZAM; i++) { d1.dobas(); d2.dobas(); } System.out.println(d1); System.out.println(d2); } }

  18. 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]

  19. 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];

  20. 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];

  21. 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];

  22. 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!

  23. 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(); }

  24. 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!

  25. A program paraméterei 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]); } }

  26. 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

  27. Rendezés • Rendezés feltétele: elemek összehasonlíthatók • Összehasonlítás • Primitív elemek: <, >, … hasonlító operátorokkal • Objektumok: metódusokkal (compareTo()) • Rendezési algoritmusok • Minimumkiválasztásos, beszúrásos, buborékos rendezés, gyorsrendezés • Direkt vagy indexes rendezés

  28. Első lépés: Legkisebb elem? Minimumkiválasztásos rendezés ...

  29. Második lépés: Legkisebb elem? ... Minimumkiválasztásos rendezés (folyt.) Eddig rendezett

  30. Harmadik lépés: Legkisebb elem? ... Minimumkiválasztásos rendezés (folyt.) Eddig rendezett

  31. Utolsó lépés: Legkisebb? ... Eddig rendezett Minimumkiválasztásos rendezés (folyt.)

  32. ... Minimumkiválasztásos rendezés (folyt.) Egész rendezett

  33. Rendezés előtt (teljes név szerint rendezett): 1 1 2 2 3 3 4 4 5 5 6 6 Abafi Vilmos Finn Aladár Zentai Béla Bor Kázmér Cirok Emil Cirok Emil Murok Jenő Finn Aladár Murok Jenő Bor Kázmér Abafi Vilmos Zentai Béla Rendezés után (keresztnév szerint rendezett): Direkt rendezés

  34. Rendezés előtt: Fő sorozat (teljes név szerint rendezett) 1 2 3 4 5 6 Abafi Vilmos Bor Kázmér Cirok Emil Finn Aladár Murok Jenő Zentai Béla 1 2 3 4 5 6 Indexsorozat (index szerint rendezett) Indexes rendezés

  35. Rendezés után: Fő sorozat (teljes név szerint rendezett) 1 2 3 4 5 6 Abafi Vilmos Bor Kázmér Cirok Emil Finn Aladár Murok Jenő Zentai Béla 4 6 3 5 2 1 Indexsorozat (keresztnév szerint rendezett) Indexes rendezés (folyt.)

  36. Keresés • Keresés feltétele: elemek azonosíthatók • Azonosítás • Primitív elemek: ==, !=, … egyenlőségvizsgáló operátorokkal • Objektumok: metódusokkal (equals()) • Keresési algoritmusok • Szekvenciális keresés • Bináris keresés

  37. 2 3 4 5 :Auto :Auto :Auto :Auto BAK900 KOS215 TIT111 ZAB200 Mazda Mazda Mazda Mazda piros fehér fehér fehér auto.equals(hasonlitoAuto)? :Auto Hasonlító objektum Mazda, a rendszám első betűje K K????? Mazda ??? 6 1 :Auto :Auto BOT490 AHA001 Fiat Skoda ezüst fehér Objektum keresése

  38. Karbantartás • Karbantartás feltétele: elemek azonosíthatók • Azonosítás: kulcs (egyedi!) • Karbantartási műveletek • Beszúrás (Felvitel) • Törlés • Módosítás • Hatékonysági szempontok • Gyorsaság • Helyfoglalás

  39. Rendezetlen Rendezett Van kulcs Rendezetlen, van kulcs Rendezett, van kulcs Nincs kulcs Rendezetlen, nincs kulcs Rendezett, nincs kulcs Karbantartás esetei • Rendezetlen konténer • beszúrás, törlés gyors • keresés lassú • Rendezett konténer • rendezett lista, keresés gyors • beszúrás, törlés, módosítás lassú • Van kulcs  Az objektumok egyediek • Nincs kulcs  Lehet két azonos állapotú objektum

  40. Új elem 1 2 ElemSzám ... ... ElemSzám = ElemSzám + 1 Rendezetlen konténer Felvitel (mindig az utolsó után):

  41. Törlendő elem 1 2 i ElemSzám ... ... ... ElemSzám = ElemSzám - 1 Rendezetlen konténer (folyt.) Törlés:

  42. Rendezetlen konténer (folyt.) Módosítás: Módosított elem 1 2 i ElemSzám ... ... ...

  43. Új elem ElemSzám = ElemSzám + 1 Rendezett konténer Felvitel: 1 ElemSzám ... ...

  44. Törlendő elem 1 ElemSzám ... ... ElemSzám = ElemSzám - 1 Rendezett konténer (folyt.) Törlés:

  45. Rendezett konténer (folyt.) Módosítás: Régi elem törlése + Új elem felvitele

  46. Feladat – Primitív rendezett Kérjünk be a felhasználótól számokat 0 végjelig, majd írjuk ki a számokat értékük szerint növekvő sorrendben! Ezután tegyük lehetővé, hogy a felhasználó kereshessen számokat a bevitt számsorozatban: ha az általa megadott szám benne van a sorozatban, írjuk ki első előfordulásának indexét (nullától számozva), egyébként írjuk ki, hogy "Nincs ilyen szám"! Ha a megadott szám 0, legyen vége a programnak!

  47. Kontener -tomb: int[1000] -size: int PrimitivRendezett kontener +Kontener() +kiir() -rendez() +indexOf(elem:int): int +main(...) Osztálydiagram

  48. import extra.*; class Kontener { private int[] tomb = new int[1000]; private int size=0; public Kontener() { int elem; while ((size<tomb.length) && (elem = Console.readInt("Szam: "))!=0) { tomb[size++] = elem; } rendez(); }

  49. public void kiir() { for (int i=0; i<size; i++) System.out.print(tomb[i]+" "); System.out.println(); } public int indexOf(int elem) { for (int i=0; i<size; i++) { if (tomb[i] == elem) return i; if (tomb[i] > elem) return -1; } return -1; }

  50. private void rendez() { for (int i=0; i<=size-2; i++) { int minIndex = i; for (int j=i+1; j<=size-1; j++) if (tomb[j] < tomb[minIndex]) minIndex = j; if (i != minIndex) { int seged = tomb[i]; tomb[i] = tomb[minIndex]; tomb[minIndex] = seged; } } } } // Kontener

More Related