Zadanie 8
Najneskorší termín odovzdania: 14.12.2025 (nedeľa) o 18:00
Odovzdávané súbory: Kid.java, Event.java
Evaluátor je vypnutý. Riešenia môžete odovzdávať v moodle, ale nedostanete feedback, či to funguje. Evaluátor bude spustený najneskôr v pondelok. Všetky riešenia odovzdané pred spustením evaluátora prejdu automaticky procesom evaluácie. V momente, keď bude evaluátor plne funkčný, tento oznam bude odstránený.
Doplňujúce požiadavky:
- riešenia, ktoré nebude možné skompilovať (t.j. riešenia so syntaktickými chybami) nebudú hodnotené,
- zdrojový kód správne naformátujte (CTRL+ALT+L),
- očakáva sa vhodne okomentovaný zdrojový kód
- v prípade potreby si vytvorte pomocné metódy
- v tomto zadaní nie je dovolené používať Stream API.
Mikuláš
Firma organizuje mikulášsku párty pre deti zamestnancov. Keďže je vhodné prispôsobiť darčeky a program veku a pohlaviu detí, je potrebné urobiť prehľad o prihlásených deťoch.
Uvažujme triedu Kid, s nasledovnými inštančnými premennými:
- name – označuje krstné meno dieťaťa (krstné meno v tomto prípade pozostáva iba z jedného slova)
- age – celočíselné označenie veku dieťaťa
- isGirl – true pre dievča, false pre chlapca
- parent – celé meno rodiča dieťaťa
Okrem premenných obsahuje trieda konštruktor, gettre a dvojicu metód equals-hashCode. Triedu nemodifikujte. V prípade potreby si vytvorte metódu toString.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 import java.util.Objects;
public class Kid {
private String name;
private int age;
private boolean isGirl;
private String parent;
public Kid(String name, int age, boolean isGirl, String parent) {
this.name = name;
this.age = age;
this.isGirl = isGirl;
this.parent = parent;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public boolean isGirl() {
return isGirl;
}
public String getParent() {
return parent;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Kid kid = (Kid) o;
return age == kid.age && isGirl == kid.isGirl && Objects.equals(name, kid.name) && Objects.equals(parent, kid.parent);
}
@Override
public int hashCode() {
return Objects.hash(name, age, isGirl, parent);
}
}
Uvažujme triedu Event, ktorá uchováva informáciu o deťoch prihlásených na Mikuláša:
V zozname sa žiadne dieťa nenachádza viackrát. Poradie detí v zozname nemá striktnú logiku (t.j., deti nie sú zoradené podľa mena, ani iného kritéria).
Môžete predpokladať, že v zozname je aspoň jedno dieťa.
Počet tínedžerov (1 bod)
Metóda vráti celé číslo – počet chlapcov, ktorí majú viac ako 12 rokov.
1 public int numberOfTeenageBoys()
Počet detí (1 bod)
Vráti referenciu na nový objekt implementujúci rozhranie Map, kde kľúčom sú mená zamestnancov a každému zamestnancovi je pridelený počet jeho detí, ktoré sú prihlásené na event.
1
Najmladšie dieťa (1 bod)
Vráti meno najmladšieho dieťaťa zo všetkých. Ak je takých detí viac, vráti ľubovoľné z nich.
1
Vekový rozdiel (1 bod)
Vráti rozdiel medzi najmladším a najstarším dieťaťom. Inak povedané vráti najväčší možný vekový rozdiel medzi ľubovoľnou dvojicou detí.
1 public int ageRange()
Krstné mená (1 bod)
Vráti zoznam všetkých krstných mien detí. Tento zoznam obsahuje každé meno najviac raz.
1 public List<String> uniqueNames()
Zoznam detí zamestnanca (1 bod)
Pre zadaného zamestnanca vráti zoznam jeho detí.
1
Odstráni zamestnanca a jeho deti (1 bod)
Táto metóda odstráni z eventu zamestnanca a všetky jeho deti. Metóda priamo modifikuje zoznam referencovaný inštančnou premennou kids. Metóda vráti počet detí, ktoré boli vymazané z eventu.
1 public int removeEmployeeFromEvent()
Je tam také dieťa? (1 bod)
Metóda vráti, či je na event prihlásené také dieťa, ako je zadané parametrami – meno rodiča, vek dieťaťa a pohlavie.
1
Zamestnanci s viacerými deťmi (1 bod)
Vráti zoznam mien zamestnancov, ktorí majú na evente viac ako jedno dieťa.
1 public List<String> employeesWithMultipleKids()
Najčastejší vek (1 bod)
Vráti vek detí, ktorý je najčastejšie zastúpený. V prípade zhody pre viacero hodnôt veku vráti menšiu hodnotu.
1 public int mostCommonAge()
Chlapci starší ako priemer (1 bod)
Vráti počet chlapcov, ktorí sú starší ako je vekový priemer všetkých detí.
1 public int boysOverAverageAge()
Bonus (1 bod)
Bonus je udelený za vyriešenie všetkých úloh.
Zadanie je inšpirované archívnym finaltermom.
