01. Polia a stringy
Last updated
Last updated
Na rozcvičku vyrobte statický skeč, ktorý n
krát pod seba vypíše na obrazovku názov vašej obľúbenej kapely. Podľa výšky obrazovky a podľa hodnoty n
si vypočítajte výšku jedného riadku v
a použite túto výšku na nastavenie veľkosti písma aj na určenie súradníc textu vo for
cykle.
Máme dobrý zvyk písať kód tak, že je v ňom čo najmenej čísel. Čo sa len dá, to uložíme do premennej. Tak máme premennú n
na počet riadkov, premennú v
na výšku jedného riadku.
Ak by sme chceli uložiť do premennej aj názov kapely, tak budeme potrebovať nový typ premenných. Doteraz sme používali premenné typu float
pre desatinné čísla a premenné typu int
pre celé čísla.
Teraz použijeme premennú typu String
do ktorej vieme uložiť texty:
String je typ premenných, ktoré obsahujú texty. Niekedy sa používa aj slovenské slovo reťazec. To preto, že je to vlastne zreťazenie jednotlivých znakov za seba.
So stringom vieme robiť napríklad aj takú vec, že si vytiahneme len jeden konkrétny znak.
Takto napríklad vypíšeme vo for
cykle namiesto celého slova len i
-ty znak:
Pozor. Ak je vaše meno kapely kratšie ako je n
, tak vám program vypíše chybu:
StringIndexOutOfBoundsException: String index out of range
Ak je môj string "THE CURE", to je 8 znakov. Prvý znak má index 0, druhý znak má index 1, posledný znak má index 7. Ak vo for cykle
ale budem chcieť vypísať znak s indexom 8, 9, 10 a viac, tak tento string také znaky nemá a stane sa chyba.
Ak vám program vypisuje chybu, vymyslite si kapelu s dlhším názvom, napríklad Velvet Underground:
Tu zase narazíme na to, že string je dlhší ako naše n
a cyklus skončil skôr ako sme vypísali všetky písmená. Poradíme si tak, že hodnotu n
nastavíme podľa dĺžky stringu. Takto:
Upravte program tak, aby párne písmená boli ružové a nepárne modré. Pripomeňme si, že podmienka, či je číslo i
párne vyzerá takto: if (i%2 == 0)
Napíšte nový skeč, ktorý na obrazovku na náhodné pozície náhodnou farbou vypíše jednotlivé písmená vášho mena:
Pre náš ďalší trik budem potrebovať, aby ste pripravili skeč, v ktorom bude stringová premenná meno
s hodnotou "John" a tento program vypíše premennú meno
4-krát pod seba, zarovnanú doľava.
To je celé, žiadny chyták:
Ako by sme postupovali, keby sme chceli, aby program namiesto 4x John vypísal 4 rôzne mená, napríklad John, Paul, Ringo a George?
Museli by sme si vyrobiť premenné meno1
, meno2
, meno3
, meno4
a potom každú vypisovať v jej vlastnom príkaze text()
.
Otrava.
Váš program vyzerá asi takto:
Skúste namiesto premennej meno
napísať takúto premennú mena
:
A vo for
cykle upravte výpis takto:
Keď za typ premennej napíšeme znaky []
, znamená to, že tá premenná nebude obsahovať iba jednu hodnotu, ale bude obsahovať hodnôt viac. Všetky tie hodnoty sú toho istého typu.
Takýto druh premenných voláme pole.
Tu sú príklad troch rôznych polí. Jedno je pole stringov, druhé je pole celých čísel, tretie je pole desatinných čísel.
Keď chceme použiť jednu položku z poľa, odkážeme sa na ňu znova pomocou hranatých zátvoriek, do ktorých dáme konkrétny index. Napríklad dni[0]
je "Pondelok"
.
Vzťah medzi poľami a cyklami je intenzívny, pretože keď chceme niečo urobiť s položkami v poli, tak musíme celé pole cez for cyklus preliezť. Ako napríklad pri výpise:
Zmeníme teraz kapelu z Beatles na Nirvanu:
Čo sa stane, keď spustíme takýto program?
Sa stala chyba: ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
Je to podobné ako keď sme po písmenkách vypisovali slovo a minuli sa písmenká skôr ako skončil cyklus. Tu sa nám minuli položky v poli. Počet opakovaní cyklu sme nastavili na n=4
, čiže i
nadobúda hodnoty 0
,1
,2
,3
. Ale naše pole má k dispozícii len položky s indexami 0
,1
,2
.
Musíme upraviť počet n
podľa dĺžky poľa:
Takto napísaný program je univerzálny a funguje na ľubovoľne početné kapely:
Reťazec (string) pozostáva zo znakov. Pole pozostáva z položiek.
Dĺžka stringu je length()
, napríklad kapela.length()
Dľžka poľa je length
, napríklad mena.length
Konkrétny znak z reťazca dostaneme cez charAt()
, napríklad kapela.charAt(i)
Konkrétnu položku z poľa dostaneme cez []
, napríklad mena[i]
.
Vytvorte plagát pre hudobný festival. Do poľa kapely
pridajte ľubovoľný počet vašich obľubených kapiel. A všetky ich pomocou for
cyklu vypíšte, každú na iné náhodné miesto a inou náhodnou farbou:
Vytvorte skeč, ktorý má pole s názvom cisla
. Typ tohto poľa je int[]
.
Do poľa cisla
priraďte čísla 100, 100, 130, 150, 220, 190, 200, 220, 230, 240
.
Program vykreslí vedľa seba stĺpce, ktoré sú tak vysoké ako jednotlivé položky z poľa.
Do poľa s typom int[]
vieme uložiť aj farby, ak sú zapísané ako hexadecimálny kód (napríklad #FF4DD3, bez úvodzoviek).
Vytvorte skeč, v ktorom bude pole s názvom semafor
a v ňom budú uložená červená, oranžová a zelená farba, napríklad: {#FF0000, #FFBC29, #16B91D }
.
Skeč vykreslí vo for
cykle kruhy jednotlivých farieb. Veľkosť kruhu je v premennej d
.
Pridajte viac farieb do poľa a otestujte, že vám program stále funguje.
n=12