9. lecke Szótár (2) - Szorgalmi

Online Android szakkör (DKRMG)


Hozzáadás

Természetesen ez is megoldható tömbökkel is, pont ez a jó a programozásban: nincsen lehetetlen! Legfeljebb nem lesz olyan szép/hatékony/érthető. Nézzük meg, hogy lehet hozzáadni egy újabb elemet a tömb végére:

Fentebb azt mondtuk, hogy a tömb mérete kőbe van vésve, az nem változtatható. Ez így is van, tehát a régi tömbünkbe már nem fér bele több elem. De mi akadályoz meg minket abban, hogy csináljunk egy új tömböt, abba belerakjuk az összes régi elemet ÉS az újat?

A terv:

  1. új tömb létrehozása, ami pont eggyel nagyobb, mint a régi (tömb hossza: szavak.length)
  2. Elemek másolása a régiből az újba, egyesével, az elejéről kezdve
  3. Új elem beszúrása az új tömb utolsó helyére
  4. Régi tömb változójának átállítása az új tömbre.

Érdemes lenne magadtól megpróbálni megírni a fenti lépéseket, amihez adunk pár tippet/javaslatot. Ha elakadnál, gombnyomásra megjelenik a megoldás.

Tippek:

Megoldás:

Ahhoz, hogy a változást a lista is észrevegye, sajnos újra kell csinálnunk az adaptert, és újra hozzá kell rendelnünk a listához:

ArrayAdapter<Szo> adapter = new ArrayAdapter<Szo>(this, android.R.layout.simple_list_item_1, szavak);
szolista.setAdapter(adapter);

Törlés

Ha már itt vagyunk, érdemes lenne a törlést is megnézni.

Ahogy a tömb mérete nem nőhet, úgy csökkenteni sem lehet azt. Elvileg meg lehetne csinálni, hogy a törlendő elem helyére valami spéci értéket rakunk (Java-ban ez általában a null), de azzal a ListView, illetve az Adapter nem tud mit kezdeni, hibát fog dobni, és összeomlik a program. Itt is hasonló logikát kell követni, mint a hozzáadásnál: új tömböt kell gyártani, amiből hiányzik a törlendő elem.

Egy másik probléma, hogy nem tudjuk, hogy melyik elemet szeretnénk törölni. Később lesz rá feladat, most maradjunk annyiban, hogy például a "Hozzáadás" gomb megnyomásakor mindig töröljük ki a 3. elemet a tömbből. Nem túl felhasználóbarát, de használható, és később megírjuk rendesen.

A terv:

  1. új tömb létrehozása, ami pont eggyel kisebb, mint a régi
  2. Elemek másolása a régiből az újba, de figyelve, hogy a törlendő elemet nem szabad másolni!
  3. Régi tömb változójának átállítása az új tömbre.

Ezt is érdemes lenne megpróbálni önállóan!

Tippek:

Megoldás:

Ahhoz, hogy a lista most is frissüljön, megint új adapter kell, amit hozzá kell rendelni a listához. Lásd a "Hozzáadás" rész végén.

Fontos, hogy megértsd, mit és miért csinálnak a for-ciklusok. Ha bármi nem teljesen világos, olvass utána, vagy kérdezz minket!

Ha mindezekkel megbírkóztál, térj vissza leckéhez, és folytasd a listákkal!
A fentiek tükrében remélhetőleg egyértelmű lesz, hogy miért használunk majdnem mindenhol listákat tömbök helyett.