01. 1. Cvičenie - Technológia Java
Úlohy:
    Úloha: Aký je rozdiel medzi inštaláciou JDK, JRE a NetBeans?
    Úloha: Zistite aký súbor pribudol po preklade v adresári. Čo obsahuje daný súbor?
    Úloha: Čo sa stane ak zadáte v príkazovom riadkujava helloworld?
    Úloha: Skúste premenovať v HelloWorld.java metódu main na metódu start. Podarilo sa program skompilovať a spustiť?
    Úloha: Zistite kde je možné absolvovať certifikáciu OCPJP. Je nutné pred získaním certifikátu OCPJP Certified Java Associate?
    Úloha: Koľko stojí certifikácia na OCPJP? Koľko stojí prípravný kurz na získanie certifikátu?
02. 2. Cvičenie - IDE NetBeans
Úlohy:
    Úloha: Vytvorenú triedu PrintSquare upravte tak aby vypisovala Hello World!.
    Úloha: Triedu preložte (menu „Build”) a spustite (menu „Run”).
    Úloha: Premenujte vytvorenú triedu pomocou refaktorizácie „Rename” na HelloWorld.
    Úloha: Otestujte použitie skratky sout vo vytvorenom programe. Napíšte súvisle sout a stlačte tabulátor (závisí od nastavenia v prostredí).
    Úloha: Definujte vlastnú skratku ma pre vygenerovanie hlavnej metódy main programu v nasledujúcom tvare a otestujte ju.
    
    public static void main(String[] args) {
        ${cursor}
    }
    
    Úloha: Nájdite chyby v programe podľa pokynov v zdrojovom kóde PrintTriangle.java.
    Úloha: Vygenerujte dokumentáciu zo zdrojového kódu projektu zvolením položky „Generate Javadoc” v kontextovom menu nad projektom, respektíve zvolením položky „Generate Javadoc for ...” v hlavnom menu „Build”.
    Úloha: Nájdite chyby a upravte program NumberToText.java slúžiaci na prevod čísel na slovnú reprezentáciu.
    Úloha: Na školskom GitLab serveri vytvorte nový projekt s názvom tjava-2015 a vykonajte push suboru README (bez prípony) s nasledujúcim obsahom:
    
    STUDENT ID: S0123456789
    GROUP : cisloSkupiny
    
    kde S0123456789 nahraďte za svoje jedinečné identifikačné čislo a cisloSkupiny nahraďte číslom Vašej skupiny v rozvrhovej jednotke. Oba údaje nastavte podľa systému MAIS - ID nájtede v študentskom rozhraní systému MAIS vo svojom profile. Číslo skupiny nájdete na .
    Úloha: Otestujte podporu pre ladenie vytvorenej aplikácie spustením aplikácie v móde „Debug” výberom položky „Debug Main Project” v menu „Run”.
    Vložte prerušenie vykonávania programu (breakpoint) na ľubovoľný príkaz v metóde main a sledujte zmeny premenných počas vykonávania aplikácie v okne „Local Variables” a hodnoty vami zvolených výrazov v okne „Watches” (výrazy pridáte prostredníctvom kontextového menu zobrazeného stlačením pravého tlačidla myši nad plochou okna „Watches”).
03. Cvičenie - Údajové typy (Minesweeper Task 1)
Úlohy:
    Úloha: Otvorte v prostredí triedu Field. Prejdite pomocou „CTRL” a súčasným stlačením ľavého tlačidla myši na triedu Tile pomocou riadku private Tile[][] tiles;.
    Úloha: Vyhľadajte všetky miesta kde sa používa premenná tiles triedy Field.
    Úloha: Aké údajové typy su použité v danom projekte? Ktoré z nich sú primitívne?
    Úloha: Skontrolujte si svoje hodnotenie v systéme Arena.
04. Objekty a triedy (Minesweeper Task 2)
Úlohy:
    Úloha: Pridajte metódu int getValue() do triedy Clue.
    Úloha: Pridajte metódy int getRowCount(), int getColumnCount(), int getMineCount() a GameState getState() do triedy Field použitím refaktorizácie Encapsulate Fields.
    Úloha: Pridajte metódu Tile getTile(int row, int column) do triedy Field, ktorá vráti dlaždicu podľa zadaného riadku a stĺpca. Riadky a stĺpce sú číslované od 0.
    Úloha: Implementujte metódu void markTile(int row, int column) v triede Field. Metóda slúži na označenie/odznačenie dlaždice špecifikovanej riadkom a stĺpcom. V prípade, že je dlaždica neodkrytá (CLOSED) bude jej stav zmenený na označená (MARKED). Ak je dlaždica označená (MARKED) bude jej stav zmenený na neodkrytá (CLOSED). Riadky a stĺpce sú číslované od 0.
    Úloha: Implementujte metódu void generate() v triede Field tak, aby v hernom poli tiles náhodne rozložila míny (Mine) a doplnila pomocné polia (Clue), pričom počet mín, ktoré majú byť rozložené je daný premennou mineCount.
05. Rozhrania (Minesweeper Task 3)
Úlohy:
    Úloha: V balíku minesweeper definujte rozhranie UserInterface ako predpis, ktorý musia spĺňať používateľské rozhrania pre aplikáciu Minesweeper.
    Úloha: Implementujte metódu void update() v triede ConsoleUI, ktorá zabezpečí vykreslenie herného poľa.
    Úloha: Implementujte metódu boolean isSolved() definovanú v triede Field, ktorá určuje úspešné odkrytie hracieho poľa.
06. Interaktívne programy (Minesweeper Task 4)
Úlohy:
    Úloha: Implementujte metódu void processInput() v triede ConsoleUI zabezpečujúcu interakciu s hráčom.
    Úloha: Doplňte do metódy void newGameStarted(Field field) v triede ConsoleUI test na úspešné (field.getState() == GameState.SOLVED) resp. neúspešné (field.getState() == GameState.FAILED) ukončenie hry.
    Úloha: Implementujte súkromnú metódu void openAdjacentTiles(int row, int column) v triede Field zabezpečujúcu odkrytie všetkých susedných dlaždíc. V tejto metóde použite na odkrytie susedných dlaždíc metódu void openTile(int row, int column).
    Úloha: Doplňte do metódy void openTile(int row, int column) aplikovanie metódy void openAdjacentTiles(int row, int column) v prípade odkrytia dlaždice typu Clue s hodnotou 0.
    Úloha: Akceptujte určenie riadku s malým alebo veľkým písmenom vo vstupnej požiadavke ako aj určenie akcie pre označenie dlaždice – M/m, resp. odokrytie dlaždice – O/o.
07. Výnimky a testovanie programov (Minesweeper Task 5)
Úlohy:
    Úloha: Pridajte do projektu triedu WrongFormatException do balíka minesweeper.consoleui definujúcu výnimky označujúce zlý formát vstupu. Zdrojový kód danej triedy je WrongFormatException.java.
    Úloha: V triede ConsoleUI implementujte súkromnú metódu void handleInput(String input) throws WrongFormatException , ktorá zabezpečí spracovanie vstupného reťazca. Presuňte do tejto metódy existujúce spracovanie vstupného reťazca z metódy void processInput(). V prípade zle zadaného formátu táto metóda vyhodí výnimku WrongFormatException.
    Úloha: Do metódy void processInput() vložte volanie metódy void handleInput(String input) throws WrongFormatException. Použitie príkaz try { ... } catch (WrongFormatException ex) {...} na odchytenie výnimky a jej spracovanie (vypísanie ex.getMessage()).
    Úloha: Doplňte funkčnosť do metódy update() v triede ConsoleUI , ktorá zabezpečí výpis s uvedením počtu neoznačených mín. Pre získanie počtu neoznačených mín implementujte verejnú metódu int getRemainingMineCount() v triede Field.
    Úloha: Vygenerujte pre triedu Field testovací súbor FieldTest.
    Úloha: Spustite test pre projekt Minesweeper.
    Úloha: Pridajte verejnú metódu void generate() do testovacej triedy FieldTest. Implementujte ju podľa požiadaviek uvedených v tomto bode. Overte týmto testom správnosť vygenerovania hracieho poľa.
08. Kolekcie (Minesweeper Task 6)
Úlohy:
    Úloha: Pridajte do triedy Minesweeper súkromnú členskú premennú long startMillis. Táto premenná bude slúžiť na uloženie času začiatku hrania hry. Nastavte danú premennú na začiatku hrania hry použitím metódy System.currentTimeMillis().
    Úloha: Pridajte do triedy Minesweeper verejnú metódu int getPlayingSeconds(), ktorej návratovou hodnotou je počet sekúnd hrania hry.
    Úloha: Pridajte do projektu do balíka minesweeper zdrojový text BestTimes.java.
    Úloha: Oboznámte sa s obsahom daného zdrojového textu. Daný zdrojový text obsahuje triedu BestTimes a statickú vnorenú triedu PlayerTime. Trieda BestTimes definuje manipuláciu s hráčmi a ich dosiahnutými časmi v hre. Trieda PlayerTime definuje objekty slúžiace na uloženie údajov o hráčovi (meno) a jeho čase.
    Úloha: V triede PlayerTime implementujte verejné metódy String getName() a int getTime().
    Úloha: Implementujte verejnú metódu String toString() v triede PlayerTime, ktorá vráti textovú reprezentáciu času hráča (meno a čas).
    Úloha: V triede PlayerTime implementujte rozhranie Comparable pridaním konštrukcie implements Comparable<PlayerTime> a implementujte metódu int compareTo(PlayerTime o). Objekty triedy PlayerTime majú byť usporiadané podľa času hrania (time).
    Úloha: Implementujte verejnú metódu public void addPlayerTime(String name, int time) v triede BestTimes , ktorá umožní pridanie mena hráča a času do zoznamu.
    Úloha: Implementujte verejnú metódu String toString() v triede BestTimes, ktorá vráti textovú reprezentáciu časov dosiahnutých hráčmi vrátane ich mien a poradia.
    Úloha: Pridajte do triedy Minesweeper súkromnú členskú premennú BestTimes bestTimes. Inicializujte túto premennú inštanciou triedy BestTimes.
    Úloha: V triede Minesweeper implementujte verejnú metódu BestTimes getBestTimes().
    Úloha: Pridajte do triedy Minesweeper súkromnú statickú premennú Minesweeper instance. Inicializujte túto premennú na prvom riadku konštruktora nasledovne: instance = this.
    Úloha: V triede Minesweeper implementujte verejnú statickú metódu Minesweeper getInstance(), ktorej návratová hodnota je jediná inštancia triedy Minesweeper.
    Úloha: Doplňte do triedy ConsoleUI do metódu void update() výpis času hrania hry.
    Úloha: Doplňte do triedy BestTimes metódu void reset() slúžiacu na zrušenie záznamov o hráčoch a ich časoch.
09. Údajové prúdy (Minesweeper Task 7)
Úlohy:
    Úloha: Vytvorte triedu Settings, ktorá definuje nastavenie hry a zabezpečuje uloženie do súboru a získanie nastavenia zo súboru. Túto triedu umiestnite do balíka minesweeper. Nastavenie hry bude definovať veľkosť hracieho poľa a počet mín.
    Úloha: Vzhľadom na zámer serializácie nastavenia pridajte v definícii triedy Settings implementáciu rozhraniaSerializable, ktoré sa nachádza v balíku java.io.
    Úloha: Vo vytvorenej triede Settings vytvorte členské premenné rowCount, columnCount a mineCount typu private final int, ktoré budú definovať veľkosť hracieho poľa a počet mín. Vytvorte v tejto triede konštruktor public Settings(int rowCount, int columnCount, int mineCount). V tele konštruktora nastavte hodnoty členských premenných s rovnakými menami (použite kľúčové slovo this).
    Úloha: Použitím nástroja pre refaktorizáciu zdrojového kódu vygenerujte pre vytvorené premenné metódy na získanie ich hodnôt:
    • public int getRowCount()
    • public int getColumnCount()
    • public int getMineCount()
    Úloha: Pridajte do triedy Settings tri statické premenné definujúce rozmery a počet mín hracieho poľa pre začiatočníkov (BEGINNER), mierne pokročilých (INTERMEDIATE) a pokročilých (EXPERT).
    Úloha: Definujte v triede Settings premennú SETTING_FILE typu private static final String obsahujúcu informáciu o súbore, kde bude nastavenie hry uložené, resp. z ktorého bude nastavenie hry získané pri jej spustení.
    Úloha: Pre získanie informácie o nastavenej obtiažnosti hry je potrebné v triede Settings prekryť metódu public boolean equals(Object o) triedy Object. Táto metóda sa používa na porovnávanie dvoch objektov.
    Úloha: Prekryte v triede Settings vykonávanie metódy public int hashCode() definovanej v triede Object.
    Úloha: Implementujte metódu public void save() v triede Settings, ktorá uloží nastavenie zvolenej obtiažnosti hry do súboru použitím prúdu FileOutputStream a prúdu ObjectOutputStream pre serializáciu objektov. Pre identifikáciu súboru, do ktorého bude nastavenie uložené použite hodnotu premennej SETTING_FILE.
    Úloha: Implementujte statickú verejnú metódu public static Settings load() v triede Settings, ktorá načíta uložené nastavenie obtiažnosti hry zo súboru použitím prúdov ObjectInputStream a FileInputStream. Pre identifikáciu súboru, z ktorého bude serializovaný objekt získaný použite hodnotu premennej SETTING_FILE. V prípade, že sa nepodarí deserializovať objekt typu Settings s uloženým nastavením používateľa, bude návratovou hodnotou objekt s obtiažnosťou nastavenou v premennej BEGINNER.
    Úloha: Definujte v triede Minesweeper súkromnú premennú setting typu Settings.
    Úloha: Vygenerujte v triede Minesweeper metódy public Settings getSetting() a public void setSetting(Settings setting).
    Úloha: Pri spustení hry Minesweeper inicializujte premennú setting posledným uloženým nastavením obtiažnosti hry. Na tento účel použite statickú metódu Settings load() triedy Settings v konštruktore triedy Minesweeper.
    Úloha: Pri zmene nastavení v metóde public void setSetting(Settings setting) zabezpečte uloženie nových nastavení pomocou metódy void save() nad objektom setting.
10. Grafické používateľské rozhranie (Minesweeper Task 8)
Úlohy:
    Úloha: Pridajte do projektu (do adresára src) obsah archívu swingui.zip.
    Úloha: Implementujte metódu public void newGameStarted(Field field) triedy SwingUI.
    Úloha: Implementujte metódu public void update() triedy SwingUI. V tejto metóde je nutné nad každým grafickým komponentom triedy TileComponent aplikovať metódu updateStyle(). Taktiež je potrebné aktualizovať počítadlo zostávajúcich neoznačených mín aplikovaním metódy setMinesLeftLabelText() triedy SwingUI.
    Úloha: Implementujte metódu public void mousePressed(MouseEvent e) triedy SwingUI. Táto metóda je implementáciou reakcie na stlačenie tlačidla myši nad grafickým komponentom triedy TileComponent.
    Úloha: Vytvorte dialóg na zobrazenie času najlepších hráčov.
    Úloha: V triede Minesweeper definujte premennú private static final String DEFAULT_UI = "swing". Na základe hodnoty tejto premennej sa určí, aký typ používateľského rozhrania bude použitý (SwingUI, alebo ConsoleUI).
    Úloha: Implementujte metódu private UserInterface create(String name) v triede Minesweeper.
    Úloha: Pridajte aplikáciu metódy create(DEFAULT_UI) do konštruktora triedy Minesweeper.
    Úloha: Implementujte voľbu typu používateľského rozhrania pomocou argumentov príkazového riadku (prepínač -swing resp. -console).
    Úloha: Dodajte podporu pre odkrývanie susedných dlaždíc pri stlačení oboch tlačidiel myši naraz.
    Úloha: Rozšírte stav dlaždice o označenie otáznikom.
11. Vlákna (Minesweeper Task 9)
Úlohy:
    Úloha: Implementujte súkromnú metódu void setTimeLabelText() v triede SwingUI, ktorá sa nachádza v balíku minesweeper.swingui. Uvedená metóda nastaví text pre grafický komponent timeLabel typu javax.swing.JLabel tak, aby zobrazoval dĺžku trvania hry v okamihu zavolania metódy. Pre zistenie aktuálnej dĺžky trvania hry zavolajte metódu getPlayingSeconds() objektu triedy Minesweeper (pomocou statickej metódy getInstance()). Čas trvania hry sa uvádza v sekundách, pričom sa používajú vždy tri číslice na vyjadrenie počtu sekúnd hrania hry (napr. 008).
    Úloha: Pridajte do triedy SwingUI súkromnú členskú premennú timer typu javax.swing.Timer. Časovač umožní v pravidelných intervaloch aktualizovať zobrazenie trvania hry.
    Úloha: Do konštruktora triedy SwingUI doplňte vytvorenie objektu časovača.
    Úloha: V konštruktore triedy SwingUI spustite časovač zavolaním metódy void start() nad objektom timer.
    Úloha: Modifikujte hru tak aby bolo možné zvoliť režim hrania hry oproti najlepšiemu času. Pridajte do menu zaškrtávaciu položku „Beat Best Time Mode”. Ak je tento režim zvolený, zobrazený čas v sekundách ukazuje koľko času ešte ostáva do dokončenia hry v najlepšom čase.
    Úloha: Dodajte do hry možnosť voľby veľkosti hracieho poľa a počtu mín. Navrhnite vhodný dialóg a pridajte položku do menu umožňujúcu zobrazenie dialógu.
12. JDBC (Minesweeper Task 10)
Úlohy:
    Úloha: Pridajte súbor DatabaseSetting.java do projektu hry Minesweeper. Uvedená trieda má definované konštanty obsahujúce konfiguračné údaje pre vytvorenie spojenia na databázový systém Derby ako aj údaje potrebné pre prácu s databázou (SQL príkazy).
    Úloha: V triede BestTimes definujte súkromnú metódu void insertToDB(PlayerTime playerTime), ktorá uloží objekt triedy PlayerTime do databázy.
    Úloha: V triede BestTimes definujte súkromnú metódu void selectFromDB(), ktorá zabezpečí vytvorenie objektov typu PlayerTime s údajmi získanými z databázy a ich uloženie do zoznamu v členskej premennej playerTimes.
    Úloha: Upravte metódu void addPlayerTime(String name, int time) tak, aby bol vytvorený objekt typu PlayerTime uložený do databázy použitím metódy void insertToDB(PlayerTime playerTime).
    Úloha: Upravte metódu String toString() tak, aby sa aktualizoval zoznam časov hráčov PlayerTime v členskej premennej playerTimes podľa stavu v databáze použitím metódy void selectFromDB().
    Úloha: Nakonfigurujte databázový systém Derby v prostredí Netbeans.
    Úloha: Vytvorte databázu pre hru Minesweeper.
    Úloha: Spustite databázový systém.
    Úloha: Pridajte do classpath ovládač pre prístup k databáze.
    Úloha: Spustite hru Minesweeper a otestujte implementovanú funkčnosť.
    Úloha: Rozšírte ukladanie časov hráčov o úroveň, v ktorej bol výsledok dosiahnutý (BEGINNER, INTERMEDIATE, EXPERT). Modifikujte triedu BestTimes ako aj databázovú tabuľku player_time.
13. Zápočtový týždeň
Úlohy:
    Úloha: Vytvorenú aplikáciu samostatne predveďte cvičiacemu.
comments powered by Disqus