Online Android szakkör (DKRMG)
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:
szavak.length
)É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:
new Szo[N];
0
, utolsó elem: hossz-1
tomb[5] = <valami>;
(az 5-ös indexű helyre <valami> kerül)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);
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:
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.