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 riadku
java 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
).
public int getRowCount()
public int getColumnCount()
public int getMineCount()
Ú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:
Ú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.