Cvičenie 11 – Java Collections Framework

Cieľom cvičení je pozrieť sa na využitie Java Collections Framework-u pri riešení rôznych úloh.

Pozrite si dokumentáciu (http://docs.oracle.com/javase/7/docs/api/) k nasledujúcim rozhraniam a triedam

Skúste nájsť odpovede na nasledujúce otázky:

  • Pomocou ktorej metódy je možné zrealizovať prienik dvoch množín?
  • Ako by ste vytvorili množinu hodnôt, ktoré sú uložené v nejakom zozname (List-e)? (Všimnite si konštruktory.)
  • Na čo slúži Collections.shuffle?

Podpriemer

Vytvorte program, ktorý z konzoly bude načítavať čísla dovtedy, kým používateľ nezadá zápornú hodnotu. Program potom vypíše utriedený zoznam zadaných čísel, ktoré sú menšie než priemerná hodnota zadaných čísel.

Spoločné prednášky

Skupina študentov z rôznych odborov sa rozhodla zistiť, či existuje taká prednáška, ktorú navštevujú všetci. Každý zo študentov napísal zoznam prednášok, ktoré navštevuje (názov prednášky je jedno slovo – jeho kód). Potom spoločne vytvorili jeden veľký textový súbor (vstup pre váš program). Ten vyzeral tak, že v každom riadku, bol uvedený medzerami oddelený zoznam prednášok navštevovaných jedným študentom. Vytvorte program, ktorý nájde všetky také prednášky, ktoré sú navštevované všetkými študentmi.

Príklad vstupu:


1
2
3
MA1 alg PaZ1b koi ZLV
Alg Ma2 PAZ1b GeO Graf
LCO tg kombat ALG foja PaZ1b

Výstup:


1
ALG PAZ1B

Frekvenčná analýza

Frekvenčná analýza je obzvlášť v kryptológií dôležitým zdrojom informácií. Poznať percentuálny výskyt jednotlivých znakov je preto veľmi užitočné. Vytvorte program, ktorý zistí a vypíše nanajvýš 10 najčastejšie sa vyskytujúcich písmen v textovom súbore (nanajvýš preto, lebo v súbore môže byť napríklad len 5 rôznych písmen – vtedy treba vypísať všetky). Písmená vypíšte usporiadané podľa počtu výskytov. Využite Map<Character, Integer>.

Zlomky

Vytvorte triedu sk.upjs.umv.Zlomok, ktorá reprezentuje zlomok (dvojicu čitateľ a menovateľ). Podobne ako u objektov triedy String, aj obsah objektu triedy Zlomok nech je určený pri jeho vytvorení.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Zlomok {
    // ???

    public Zlomok(int citatel, int menovatel) {
                // ???
    }

    public int getCitatel() {
        // ???
    }

    public int getMenovatel() {
        // ???
    }
}
  • Vhodne implementujte metódy toString, equals a hashCode pre objekty triedy Zlomok (nezabudnite, že zlomok 1/2 a 2/4 reprezentujú ten istý zlomok).
  • Vyskúšajte implementáciu predchádzajúcich troch metód na množine zlomkov.
  • Do triedy Zlomok pridajte metódu pripocitaj, ktorá vráti zlomok, ktorý vznikne pripočítaním parametrom zadaného zlomku k danému zlomku:

1
public Zlomok pripocitaj(Zlomok z)

Analogické metódy vytvorte aj pre ďalšie matematické operácie.

  • Vytvorte metódu, ktorá vráti normalizovaný zlomok (menovateľ je nezáporný a nenulový, čitateľ a menovateľ sú vykrátené):

1
public Zlomok normalizuj()
  • Upravte triedu Zlomok tak, aby rozširovala triedu java.lang.Number

Algoritmy so zlomkami

Vytvorte triedu sk.upjs.Zlomkar, ktorá bude poskytovať základné algoritmy na prácu so zlomkami.

  • Do triedy Zlomkar pridajte metódu sucet, ktorá vráti súčet zlomkov v zozname zlomkov:

1
public Zlomok sucet(List<Zlomok> zlomky)
  • Do triedy Zlomkar pridajte metódu maximum, ktorá vráti najväčšiu hodnotu v zozname zlomkov (porozmýšľajte, ako využiť metódu Collections.max).

1
public Zlomok maximum(List<Zlomok> zlomky)