Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

10. diel - Viacrozmerné polia v Kotlin

V predchádzajúcom cvičení, Riešené úlohy k 9. lekcii Kotlin, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii, Riešené úlohy k 9. lekcii Kotlin , sme si uviedli metódy split() a joinToString() na textových reťazcoch. Dnešná lekcia je v kurze základných konštrukcií Kotlin v podstate bonusová a pojednáva o tzv. Viacrozmerných poliach.

Už vieme pracovať s jednorozmernými poľom, ktoré si môžeme predstaviť ako riadku priehradok v pamäti počítača.

Dátový typ poľa v Kotlin - Základné konštrukcie jazyka Kotlin

(Na obrázku je vidieť pole ôsmich čísiel)

Hoci to nie je tak časté, v programovaní sa občas stretávame aj s viacrozmernými poliami a to najmä ak programujeme nejakú simuláciu (napr. Hru).

Dvojrozmerné pole

Dvojrozmerné pole si môžeme v pamäti predstaviť ako tabuľku a mohli by sme takto reprezentovať napr. Rozohranú partiu piškvoriek. Ak by sme sa chceli držať reálnych aplikácií, ktoré budete neskôr v zamestnaní tvoriť, môžeme si predstaviť, že do 2D poľa budeme ukladať informácie o obsadenosť sedadiel v kinosály. Situáciu by sme si mohli graficky znázorniť napr. Nasledovne:

Dvojrozmerné pole v kotlín - Základné konštrukcie jazyka Kotlin

(Na obrázku je vidieť 2d pole reprezentujúci obsadenosť kinosály)

Kinosála by bol v praxi samozrejme väčší, ale ako ukážka nám toto pole postačí. 0 znamená voľno, 1 obsadené. Neskôr by sme mohli doplniť aj 2 - Rezervované a podobne. Pre tieto stavy by bolo správnejšie vytvoriť si vlastný dátový typ, tzv. Výpočet, ale s ním sa stretneme až neskôr, takže si teraz musíme vystačiť iba s číslami.

2D polia inicializujeme v Kotlin nasledujúcim spôsobom:

var kinosal = arrayOf<Array<Int>>()

V skutočnosti sa jedná o pole polí. Takže jednotlivým prvkom tohto poľa je zase ďalšie pole.

Vyššie sme síce dvojrozmerné pole úspešne deklarovali, ale musíme si ho ešte naplniť nulami. Pre vyplnenie poľa použijeme 2 vnorené cykly. Ten vonkajšie prejde riadky, ten vnútorný do každého riadku pridá daný počet núl. Budeme chcieť poľa veľkosti 5 x 5:

for (i in 0..4) {
    var pole = arrayOf<Int>()
    for (j in 0..4) {
        pole += 0
    }
    kinosal += pole
}

Naše 2D poľa si môžeme pre kontrolu vypísať. Prvý cyklus prejde jednotlivé polia a ten vnorený potom ich hodnoty:

Klikni pre editáciu
  • for (pole in kinosal) {
        for (hodnota in pole) {
            print("$hodnota ")
        }
        println()
    }
    
    • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

    výstup:

    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0

    Naplnenie dátami

    Teraz kinosála naplníme jednotkami tak, ako je vidieť na obrázku vyššie. Pretože budeme ako správni programátori leniví, využijeme na vytvorenie riadku jednotiek for cykly :) Pre prístup k prvku 2D poľa musíme samozrejme zadať 2 súradnice. Keby sme pole nemali naplnené nulami (či inými hodnotami), tak tento kód nebude fungovať.

    Klikni pre editáciu
    • kinosal[2][2] = 1
      for (i in 1..3) {
          kinosal[3][i] = 1
      }
      for (i in 0..4) {
          kinosal[4][i] = 1
      }
      
      
      • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

      Pre kontrolu môžeme poľa opäť vypísať:

      0 0 0 0 0
      0 0 0 0 0
      0 0 1 0 0
      0 1 1 1 0
      1 1 1 1 1

      N-rozmerná pole

      Niekedy môže byť príhodné vytvoriť si pole o ešte viac dimenziách. My všetci si iste dokážeme predstaviť minimálne 3D poľa. S príkladom s kinosálou sa ponúka prípad použitia, kedy má budova viac poschodí (alebo všeobecne viac kinosál). Vizualizácia by vyzerala asi nejako takto:

      3D poľa v Kotlin - Základné konštrukcie jazyka Kotlin

      3D poľa môžeme vytvoriť tým istým spôsobom, ako 2D pole:

      var kinosaly = arrayOf<Array<Array<Int>>>()

      Vyplnili by sme ho zase rovnako ako pred tým:

      for (i in 0..2) {
          var kinosal = arrayOf<Array<Int>>()
          for (j in 0..4) {
              var pole = arrayOf<Int>()
              for (k in 0..4) {
                  pole += 0
              }
              kinosal += pole
          }
          kinosaly += kinosal
      }

      Princíp je stále rovnaký, akurát je ťažšie sa v ňom orientovať :-)

      Kód vyššie vytvorí 3D poľa ako na obrázku. Pristupovať k nemu budeme opäť cez Indexer (hranaté zátvorky) ako predtým, len už musíme zadať 3 súradnice.

      kinosaly[1][2][3] = 1 // Druhý kinosála, tretí rad, štvrtý stĺpec

      Naše kino by sme si mohli vypísať napríklad takto:

      Klikni pre editáciu
      • var patro = 1
        
        for (kinosal in kinosaly) {
            println("Poschodie: $patro")
            patro += 1
            for (pole in kinosal) {
                for (hodnota in pole) {
                    print("$hodnota ")
                }
                println()
            }
            println("-----------------")
        }
        
        
        • Skontroluj, či výstupy programu zodpovedajú predlohe. S inými textami testy neprejdú.

        Výstup po priradení 1 v kóde vyššie:

        Poschodie: 1
        0 0 0 0 0
        0 0 0 0 0
        0 0 0 0 0
        0 0 0 0 0
        0 0 0 0 0
        -----------------
        Poschodie: 2
        0 0 0 0 0
        0 0 0 0 0
        0 0 0 1 0
        0 0 0 0 0
        0 0 0 0 0
        -----------------
        Poschodie: 3
        0 0 0 0 0
        0 0 0 0 0
        0 0 0 0 0
        0 0 0 0 0
        0 0 0 0 0
        -----------------

        Na záver by som rád dodal, že niektorí ľudia, ktorí nevie správne používať objekty, využívajú 2D polí na ukladanie viac údajov o jedinej entite. Napr. budeme chcieť uložiť výšku, šírku a dĺžku piatich mobilných telefónov. Hoci sa vám teraz môže zdať, že sa jedná o úlohu na 3D pole, v skutočnosti sa jedná o úlohu na obyčajné 1D pole objektov typu Telefon. Ale o tom až u objektovo orientovaného programovania. Pole si určite ešte vyskúšajte ešte v cvičenie v tomto kurze.

        V budúcej lekcii, Kvíz - Textové reťazce v Kotline , sa pozrieme na matematické funkcie a základný kurz Kotlinu dokončíme.

        V nasledujúcom kvíze, Kvíz - Textové reťazce v Kotline, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


         

        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é 25x (7.55 kB)
        Aplikácia je vrátane zdrojových kódov v jazyku Kotlin

         

        Ako sa ti páči článok?
        Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
        Predchádzajúci článok
        Riešené úlohy k 9. lekcii Kotlin
        Všetky články v sekcii
        Základné konštrukcie jazyka Kotlin
        Preskočiť článok
        (neodporúčame)
        Kvíz - Textové reťazce v Kotline
        Článok pre vás napísal Samuel Kodytek
        Avatar
        Užívateľské hodnotenie:
        2 hlasov
        Autor se věnuje všem jazykům okolo JVM. Rád pomáhá lidem, kteří se zajímají o programování. Věří, že všichni mají šanci se naučit programovat, jen je potřeba prorazit tu bariéru, který se říká lenost.
        Aktivity