Riešené úlohy k 1.-5. lekciu práce s kolekciami v Kotlin
V predchádzajúcom kvíze, Záverečný test - Kolekcia v Kotlin, sme si overili nadobudnuté skúsenosti z kurzu.
Nasledujúce 3 cvičenia vám pomôžu precvičiť znalosti programovania v Kotline z minulých lekcií. Vo vlastnom záujme sa ich pokúste vyriešiť sami. Pod článkom máte na kontrolu riešenie na stiahnutie. Ale pozor, akonáhle sa naň pozriete bez vyriešenia príkladov, stráca pre vás cvičenie zmysel a nič sa nenaučíte:)
Ak si naozaj nebudete vedieť rady, pozrite sa radšej znova do minulých tutoriálov a pokúste sa na to prísť.
Jednoduchý príklad
Naprogramujte aplikáciu, v ktorej bude niekoľko rovnakých krabíc s
položkami rôznych typov. Každá krabica bude obsahovať iba jednu
položku, pri vytváraní krabice sa bude musieť definovať, akého
typu má vkladaná položka byť. Do krabice pôjde vložiť
iba položka implementujúca rozhranie IPolozka
s vlastnosťou pre
názov položky.
Vytvorte triedy pre tieto 3 položky:
- Kniha - bude mať iba vlastnosť pre
názov z rozhrania
IPolozka
. - Topánky - okrem názvu bude mať aj vlastnosť pre veľkosť.
- Fľaša – okrem názvu bude mať aj vlastnosť pre objem.
Pre otestovanie aplikácie vytvorte 4 krabice, ktoré budú obsahovať:
- Topánky s názvom
tenisky
s veľkosťou39
- Kniha s názvom
Proměna
- Fľaša s názvom
termoska
s objemom1.5
l - Topánky s názvom
zimní boty
s veľkosťou42
Následne vypíšte obsah všetkých krabíc, ako je ukázané na ukážke nižšie. Každú vypisovanú položku získajte z inštancie krabice.
V riešení použite predpripravený kód s dátami, ktorý je k dispozícii v editore nižšie.
Ukážka obrazovky programu:
V první krabici jsou tenisky velikosti 39 Ve druhé krabici je kniha s názvem Proměna Ve třetí krabici je termoska o objemu 1.5 l Ve čtvrté krabici jsou zimní boty velikosti 42
{KOTLIN_OOP} fun main(args: Array<String>) { } {/KOTLIN_OOP}
{KOTLIN_OOP} class Kniha(val nazev: String) : IPolozka { override fun ziskejNazev(): String { return nazev } } {/KOTLIN_OOP}
{KOTLIN_OOP} interface IPolozka { fun ziskejNazev(): String } {/KOTLIN_OOP}
{KOTLIN_OOP} class Krabice<T>(var polozka: T) { fun ziskejPolozku(): T { return polozka } } {/KOTLIN_OOP}
{KOTLIN_OOP} class Lahev(val nazev: String, val objem: Double) : IPolozka { override fun ziskejNazev(): String { return nazev } fun ziskejObjem(): Double { return objem } } {/KOTLIN_OOP}
{KOTLIN_OOP} class Boty(val nazev: String, val velikost: Int): IPolozka { override fun ziskejNazev(): String { return nazev } fun ziskejVelikost(): Int { return velikost } } {/KOTLIN_OOP}
Stredne pokročilý príklad
Vytvorte program, ktorý bude predstavovať denník. Záznamy pridá samotný používateľ. Záznamy vkladajte do spojového zoznamu, pretože predpokladáme odstraňovanie náhodných záznamov. Inšpiráciu si môžete vziať z nášho diára, ktorý sme tvorili v kurze OOP.
Denník sa bude ovládať pomocou nasledujúcich príkazov:
novy
- umožní pridať nový záznam na koniec denníka,zaznamy
- zobrazí všetky napísané záznamy,smaz
- odstráni záznam,zavri
- ukončí program.
Obrazovka programu po spustení aplikácie
---------------- MENU ---------------- Deník se ovládá následujícími příkazy: - novy: Vytvoření nového záznamu - zaznamy: Zobrazí všechny záznamy - smaz: Odstranění záznamu - zavri: Zavření deníku a ukončení programu ---------------- MENU ---------------- ------------------------------------------ Počet záznamů: 0 ------------------------------------------ Zadejte příkaz:
Nový záznam
Po zadaní príkazu novy
vyzve užívateľa na zadanie textu a
vytvorenie záznamu potvrdí:
------------------------------------------ Zadejte text k záznamu: Dnes jsem se naučil pracovat se spojovým seznamem. Záznam byl vytvořen ------------------------------------------
Obrazovka programu po vytvorení záznamu:
---------------- MENU ---------------- Deník se ovládá následujícími příkazy: - novy: Vytvoření nového záznamu - zaznamy: Zobrazí všechny záznamy - smaz: Odstranění záznamu - zavri: Zavření deníku a ukončení programu ---------------- MENU ---------------- ------------------------------------------ Počet záznamů: 1 ------------------------------------------ ------------------------------------------ Poslední záznam: Dnes je dobrý den. Vytvořen: 2022-08-09 ------------------------------------------ Zadejte příkaz:
Po vytvorení záznamu sa zobrazí menu s novo vloženým záznamom.
Každý záznam teda bude obsahovať tieto informácie:
- Dátum - vytvorený programom,
- Text - vytvorený užívateľom.
Vytlačenie záznamu
Obrazovka programu po vytvorení záznamu:
---------------- MENU ---------------- Deník se ovládá následujícími příkazy: - novy: Vytvoření nového záznamu - zaznamy: Zobrazí všechny záznamy - smaz: Odstranění záznamu - zavri: Zavření deníku a ukončení programu ---------------- MENU ---------------- ------------------------------------------ Počet záznamů: 1 ------------------------------------------ ------------------------------------------ Poslední záznam: Dnes jsem se naučil pracovat se spojovém seznamem. Vytvořen: 2022-08-09 ------------------------------------------ Zadejte příkaz:
V prípade viacerých záznamov bude zobrazený vždy posledný vložený záznam.
Zobrazenie všetkých záznamov
Po zadaní príkazu zaznamy
program zobrazí všetky
záznamy:
------------------------------------------ Počet záznamů: 2 ------------------------------------------ ------------------------------------------ Záznam [0] vytvořen 2022-08-09: Dnes jsem se naučil pracovat se spojovým seznamem. Záznam [1] vytvořen 2022-08-09: Listy jsou užitečná věc. ------------------------------------------ ---------------- MENU ---------------- Deník se ovládá následujícími příkazy: - novy: Vytvoření nového záznamu - zaznamy: Zobrazí všechny záznamy - smaz: Odstranění záznamu - zavri: Zavření deníku a ukončení programu ---------------- MENU ---------------- ------------------------------------------ Počet záznamů: 2 ------------------------------------------ ------------------------------------------ Poslední záznam: Listy jsou užitečná věc. Vytvořen: 2022-08-09 ------------------------------------------ Zadejte příkaz:
Odstránenie záznamu
Po zadaní príkazu smaz
program zobrazí všetky
záznamy a vyzve užívateľa, aby zadal číslo záznamu, ktorý chce
vymazať. Pri nesprávnom zadaní program vypíše: Zadaná hodnota
nezodpovedá indexu žiadneho zo záznámov. a znovu vyzve na zadanie
indexu. Po odstránení záznamu sa zobrazí menu s posledným záznamom
v liste. Pokiaľ žiadny záznam už v aplikácii nie je, zobrazí sa
obrazovka ako po spustení aplikácie (viď. prvá obrazovka pod textom
Obrazovka programu po spustení aplikácie).
Obrazovka programu pred odstránením záznamu:
------------------------------------------ Počet záznamů: 1 ------------------------------------------ ------------------------------------------ Záznam [0] vytvořen 2022-08-09: Dnes jsem se naučil pracovat se spojovým seznamem. ------------------------------------------ Jaký záznam si přejete vymazat? - pro vymazání záznamu zadejte index záznamu, například => 1 Záznam k vymazání: 0
Obrazovka programu na odstránenie záznamu:
---------------- MENU ---------------- Deník se ovládá následujícími příkazy: - novy: Vytvoření nového záznamu - zaznamy: Zobrazí všechny záznamy - smaz: Odstranění záznamu - zavri: Zavření deníku a ukončení programu ---------------- MENU ---------------- ------------------------------------------ Počet záznamů: 0 ------------------------------------------ Zadejte příkaz:
Do riešenia si prekopírujte predpripravený kód s dátami, ktorý je k dispozícii v editore nižšie.
Po zadaní príkazu zavri
, denník ešte vypíše: Zatváram
denník (bez bodky).
Kód nepíšte priamo do editora, ale nahrajte svoje riešenie.
{KOTLIN_OOP} fun main(args: Array<String>) { val denik = Denik() denik.Program() } {/KOTLIN_OOP}
{KOTLIN_OOP} import java.time.LocalDate class Zaznam(val datum: LocalDate, val text: String) { fun ziskejText(): String { return text } fun ziksejDatum(): LocalDate { return datum } } {/KOTLIN_OOP}
{KOTLIN_OOP} import java.time.LocalDate import java.util.* class Denik { fun Program() { } fun VytiskniMenu() { println("---------------- MENU ----------------") println("Deník se ovládá následujícími příkazy:") println("- novy: Vytvoření nového záznamu") println("- zaznamy: Zobrazí všechny záznamy") println("- smaz: Odstranění záznamu") println("- zavri: Zavření deníku a ukončení programu") println("---------------- MENU ----------------") VytiskniPocetZaznamu() } } {/KOTLIN_OOP}
Pokročilý príklad
Naprogramujte aplikáciu, ktorá simuluje hru piškvorky pre 2 hráčov. Aplikácia vykresľuje hraciu plochu do konzoly a necháva si striedavo od hráčov zadávať súradnice, na ktoré pokladajú svoje kamene. Kontrolu výhry môžete zanedbať, užívateľské vstupy ošetrite.
Na reprezentáciu hracej plochy využite viacrozmerné pole.
Ukážka obrazovky programu:
123456789 1 2 3 X 4 5 O 6 7 8 9 Na rade je hráč s kolieskami Zadaj pozíciu X kam chceš ťahať: 10 Zadaj pozíciu Y kam chceš ťahať: 2 Neplatná pozícia, zadaj ju prosím znova. Zadaj pozíciu X kam chceš ťahať: 3 Zadaj pozíciu Y kam chceš ťahať: 2
Kontrolu správne zadaných súradníc vykonajte až vo chvíli, keď hráč
zadá obe súradnice. Je to z toho dôvodu, že okrem zvolenia
bodu mimo hracej plochy môže hráč zvoliť aj pole, ktoré je už obsadené,
a to môžeme overiť až po zadaní oboch súradníc. V tomto prípade
vypíšte " Neplatná pozice, zadej ji prosím znovu.
".
Pokiaľ hráč nezadá číslo, vypíšte "
Zadaná hodnota není číslo nebo celé číslo, zadejte prosím celé číslo.
" a vyžiadajte od užívateľa nový vstup. Tento test
vykonajte pre každú súradnicu zvlášť.
Cvičenie si vyskúšajte vo vašom IDE. Nižšie v bonusovom príklade piškvorky dorobíte a budete mať možnosť celú hru odovzdať.
Bonus: Rozšírenie pokročilého príkladu
Do piškvoriek doimplementujte kontrolu konca hry. Môžu nastať tieto prípady:
- Výhra - 5 rovnakých symbolov v rade
- Výhra - 5 rovnakých symbolov v stĺpci
- Výhra - 5 rovnakých symbolov diagonálne (nezabudnite, že diagonály sú dve:-) )
- Remíza - Zaplnenie hracej plochy
V programe použite nasledujúce texty:
- Pri výhre: „
Vyhrál hráč s kolečky
“, resp. "Vyhrál hráč s křížky
" - Pri zaplnení hracej plochy: "
Remíza.
"
Pre úspešné prejdenie testom je nutné dodržať nasledujúce body:
- Po spustení program vykreslí prázdnu hraciu plochu.
- Medzi súradnicami riadkov hernej plochy a samotnou hernou plochou je jeden prázdny stĺpec.
- X je vodorovná súradnica, Y je zvislá súradnica.
- Symboly kameňov sú "O" a "X" (veľké písmená).
- Všetky texty musia presne zodpovedať ukážkam a zadaniu (vrátane interpunkcie).
- Nepoužívať príkaz na vymazanie konzoly (medzi jednotlivými ťahmi).
123456789 1 2 XXXX 3 4 5 O 6 O 7 O 8 O 9 O Vyhral hráč s kolieskami
{KOTLIN_OOP}
fun main(args: Array<String>) {
}
{/KOTLIN_OOP}
V budúcej lekcii, Použitie triedy Collections v Kotlin - Získavanie a modifikácia , si podrobne rozoberieme pomocnú triedu Collections a jej metódy na získavanie a modifikáciu dát kolekcií.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 9x (13.82 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Kotlin
Na absolvovanie tohto cvičenia prosím splň 2 ľubovoľné príklady tým, že ich úspešne odovzdáš na otestovanie.