OOPR_05. Případové studie



Podobné dokumenty
OOPR_05. Případové studie

Přehled probírané látky

20. Projekt Domácí mediotéka

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Typický prvek kolekce pro české řazení

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

Návrhové vzory Design Patterns

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Abstraktní datové typy: zásobník

1. Téma 12 - Textové soubory a výjimky

Úvod do programovacích jazyků (Java)

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Principy objektově orientovaného programování

Třídy a objekty -příklady

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Java a XML. 10/26/09 1/7 Java a XML

Teoretické minimum z PJV

Java - řazení objektů

Výčtový typ strana 67

Deklarace a vytváření

9. přednáška - třídy, objekty

typová konverze typová inference

Objektově orientované programování 1 XOBO1. Autor: Doc. Ing. František Huňka, CSc.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

PREPROCESOR POKRAČOVÁNÍ

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

KTE / ZPE Informační technologie

Úvod do programování - Java. Cvičení č.4

Algoritmizace a programování

Seminář Java II p.1/43

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Jazyk C# (seminář 6)

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Algoritmizace a programování. Terminálový vstup a výstup

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Generické programování

Java - výjimky. private void vstup() throws IOException {... }

5 Rekurze a zásobník. Rekurzivní volání metody

Programovací jazyk Java

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

11. Dědičnost. Dědičnost strana 103

7. Datové typy v Javě

Algoritmizace a programování

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Vytváření a použití knihoven tříd

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

17. Projekt Trojúhelníky

Projekty pro výuku programování v jazyce Java

6. PRÁCE S DATOVÝMI PROUDY

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Obsah přednášky. dědičnost modifikátory (specifikátory) přístupu

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Programování v C++ 1, 5. cvičení

Datové struktury. alg12 1

KTE / ZPE Informační technologie

8 Třídy, objekty, metody, předávání argumentů metod

Konstruktory. Konstruktor je speciální metoda, pro vytváření a inicializaci nových objektů (instancí). Název metody je totožný s názvem třídy.

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Obsah přednášky. dědičnost modifikátory (specifikátory) přístupu

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

1. Programování proti rozhraní

Objektově orientované programování

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Návrhové vzory design patterns význam a použití

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Podmínky na zápočet. Java, zimní semestr

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

IRAE 07/08 Přednáška č. 1

Abstraktní třída a rozhraní

Iterator & for cyklus

Paměť počítače. alg2 1

UJO Framework. revoluční architektura beans. verze

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

Objektové datové typy

Soubor jako posloupnost bytů

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Programování v C++ 1, 6. cvičení

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Více o konstruktorech a destruktorech

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Java Výjimky Java, zimní semestr

Java Enum Java, zimní semestr ,2017 1

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

6. Příkazy a řídící struktury v Javě

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Seminář Java IV p.1/38

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Regulární výrazy. Vzory

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Obsah přednášky. Postup při vytváření objektů. Postup při vytváření objektů. Alokace paměti. Inicializace hodnot atributů

Java a Caché IV: Manipulace s objekty

Tabulková data. budeme pracovat s CSV soubory položky oddělené středníkem, např.

Transkript:

OOPR_05 Případové studie 1

Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2

Grafický objekt - čára Třída čára datové atributy: počátek Bod + / - délka ve směru osy x + / - délka ve směru osy y Vlastní implementace zjištění hodnoty pro cyklus for getmax() orientace vykreslování -1, 0, 1 kontrola správnosti parametrů délka 3

public class Cara { private Bod pocatek; private int delkax; private int delkay; public Cara(Bod bod, int delkax, int delkay) { pocatek = new Bod(bod); delkax = delkax; delkay = delkay; public Bod getpocatek() { return pocatek; public int getdelkax() { return delkax; return delkax; public int getdelkay() { return delkay; // maximalni hodnota pro cyklus public int getmax() { if(math.abs(getdelkax()) > Math.abs(getDelkaY())) return Math.abs(getDelkaX()); else return Math.abs(getDelkaY());

// orientace vykreslovani public int orientace(int cislo) { int vysledek; if(cislo == 0) vysledek = 0; else if(cislo < 0) vysledek = -1; else vysledek = 1; return vysledek; // kontrola delek public boolean kontrola() { if((getdelkax() == 0) (getdelkay() == 0)) return true; else if(math.abs(getdelkax()) == Math.abs(getDelkaY())) return true; System.out.println("Chyba delek cary"); return false;

public void vykresli() { int dx = orientace(getdelkax()); int dy = orientace(getdelkay()); int hranice = getmax(); if(kontrola()) { for(int i = 0; i < hranice; i++){ pocatek.vykresli(dx*i, dy*i);

import java.awt.color; public class CaraTest { public static void main(string[] args) { Bod bod = new Bod(120, 100, Color.blue); Cara cara1 = new Cara(bod, 40,0); cara1.vykresli(); Cara cara2 = new Cara(bod, 0, 40); cara2.vykresli(); Cara cara3 = new Cara(bod, -40, 0); cara3.vykresli(); Cara cara4 = new Cara(bod, 0, -40); cara4.vykresli(); Vykreslený obrázek čar Cara cara5 = new Cara(bod, 40, 40); cara5.vykresli(); Cara cara6 = new Cara(bod, -40, 40); cara6.vykresli(); Cara cara7 = new Cara(bod, 40, -40); cara7.vykresli(); Cara cara8 = new Cara(bod, -40, -40); cara8.vykresli();

Problém Chceme vytvořit aplikaci, kdy osoba má adresu a účet (v bance). První (naivní) řešení: vytvoříme jednu třídu, která obsahuje vše výhody: relativně rychlé řešení nevýhody: při každé změně adresy nebo účtu musíme měnit výchozí třídu. Lépe adresu a účet uložit do samostatných tříd. Propojení tříd budeme řešit pomocí kompozice a agregace. 8

Problém Samostatné třídy Osoba, Ucet a Adresa. Adresa bývá stabilnější a proto asociace Osoba Adresa bude řešeno pomocí kompozice kopírovacího konstruktoru. Účet podléhá častější změně, a proto bude tato asociace řešena pomocí agregace. 9

Diagram tříd úkolu Osoba Adresa 1 1 1 Ucet 1 10

public class Adresa { private String ulice; private int cislo; private String mesto; Třída Adresa // konstruktory deklarace public Adresa() { ulice = "nezadana"; cislo = 0; mesto = "neuvedene"; public Adresa(String ulice, int cislo, String mesto) { this.ulice = ulice; this.cislo = cislo; this.mesto= mesto; // kopirovaci konstruktor public Adresa(Adresa ad){ this.setulice(ad.getulice()); this.setcislo(ad.getcislo()); this.setmesto(ad.getmesto()); // pristupove metody... // modifikacni metody...

public String tostring(){ return String.format("Ulice: %s cislo: %4d mesto: %s", getulice(), getcislo(), getmesto()); Třída Adresa public void tisk() { System.out.println( this.tostring()); public void setadresa(adresa a) { this.setulice(a.getulice()); this.setcislo(a.getcislo()); this.setmesto(a.getmesto());

public class Ucet { private int cislo; private int stav; // Konstruktory tridy Ucet public Ucet() { this(0, 0); public Ucet(int cislo, int stav) { this.cislo = cislo; this.stav = stav; Třída Ucet public void vlozeni (int castka) { setstav(getstav() + castka); public int vyber (int castka) { setstav(getstav() castka); //stav = stav - castka; return stav; // pristupove a modifikacni metody... public String tostring() { return String.format("Cislo uctu: %d stav uctu: %d", getcislo(), getstav()); public void tisk() { System.out.println(this.toString());

public class Osoba { private String jmeno; private int roknarozeni; private Adresa adresa; //kompozice private Ucet ucet; // agregace Třída Osoba // deklarace konstruktoru public Osoba() { this("neuvedeno", 1900, new Adresa(), new Ucet()); public Osoba(String jmeno, int roknarozeni, Adresa adresa, Ucet ucet) { this.jmeno= jmeno; this.roknarozeni = roknarozeni; //kopirovaci konstruktor this.adresa = new Adresa(adresa); //this.adresa = adresa; odkaz je pristupny this.ucet = ucet; //agregace // pristupove a modifikacni metody... public String tostring() { String tx= String.format("\nJmeno: %s rok narozeni: + %4d\nAdresa: %s\nucet: %s", getjmeno(), getroknarozeni(), adresa.tostring(), ucet.tostring()); return tx;

public void tisk() { System.out.println(this.toString()); //adresa.tisk(); ucet.tisk(); // jiz deklarovana v metode tostring public void setucet(ucet ucet) { this.ucet = ucet; public void setadresa(adresa a) { adresa.setadresa(a); public Ucet getucet(){ return ucet; public void vlozeni(int castka){ ucet.vlozeni(castka); public void vyber(int castka) { ucet.vyber(castka);

public void tiskucet(){ System.out.println("Ucet: "+ucet.tostring()); public void tiskadresa(){ System.out.println("Adresa: "+ adresa.tostring()); Třída Osoba

public class OsobaTest { public static void main(string[] args) { Adresa a1 = new Adresa("Na nabrezi",237,"havirov"); Osoba o1 = new Osoba("Kamil",1988, a1, new Ucet()); Ucet u1 = new Ucet(1,200); Osoba o2 = new Osoba("Petr",1956, new Adresa("30. dubna",22,"ostrava"), u1); Ucet u2 = new Ucet(2, 300); o1.setucet(u2); o2.setucet(u1); o1.tisk(); o2.tisk(); o1.vyber(300); o2.vlozeni(800); Třída OsobaTest

Rozšiřování funkčnosti Ve třídě Ucet máme částku na účtu vedenou v primitivním datovém typu int (celé číslo). Není zcela vyhovující: 1. vedení i části za desetinnou čárkou 2. chceme další možnosti sčítání, odčítání, násobení, tisk, převody na euro Nutno vytvořit samostatnou třídu Koruny a vyřešit její napojení na Ucet a Osobu. 18

Rozšiřování funkčnosti Požadavky na řešení: sčítání, odčítání, částek vrací nový objekt třídy Koruny s požadovanou hodnotou, násobení s reálným číslem (může představovat úrok) vrací nový objekt třídy Koruny s výslednou hodnotou, metoda tostring() vrací hodnoty např. 12,65 Kc nebo 8,09 Kc, zadávání ve formě: new Koruny(30.91) nebo instancí třídy Koruny 19

Rozšiřování funkčnosti V jakém typu proměnné uchovávat částku: double int, int String long a pouze v haléřích pro výstup se převede na koruny a haléře 20

public class Koruny { private long halere; private static final int HALERU_DO_KORUNY = 100; //konstruktory public Koruny(double castka) { this.halere = Math.round(castka * HALERU_DO_KORUNY); public Koruny(Koruny koruny) { halere = koruny.gethalere(); public long getkoruny() { //vraci počet korun return gethalere() / HALERU_DO_KORUNY; public long gethalere() { // vraci castku v halerich return halere; public long gethaleru() { // vraci zbyle halere bez korun return gethalere() % HALERU_DO_KORUNY; public boolean iszero() { return gethalere() == 0;

public boolean equals(object obj) { if(!obj.getclass().equals(this.getclass())) return false; Koruny castka = (Koruny) obj; return this.gethalere() == castka.gethalere(); public Koruny plus(koruny castka) { return new Koruny(1.0 *(this.gethalere() + castka.gethalere()) / HALERU_DO_KORUNY); public Koruny minus(koruny castka) { return new Koruny((double) (this.gethalere() castka.gethalere()) / HALERU_DO_KORUNY); public Koruny nasobeni(double cislo) { return new Koruny((double) (Math.round(this.getHalere() * cislo)) /HALERU_DO_KORUNY);

public String tostring() { StringBuffer vysledek = new StringBuffer(""); vysledek.append(getkoruny()); vysledek.append(','); long hal = Math.abs(this.getHaleru()); if(hal == 0) vysledek.append("00"); else vysledek.append(hal); vysledek.append(" Kc"); return vysledek.tostring(); public void tisk() { System.out.println(this.toString());

public class KorunyTest { public static void main(string[] args) { Koruny castka1 = new Koruny(3.5678); Koruny castka2 = new Koruny(7.08); Třída KorunyTest Koruny vysledek = castka1.plus(castka2); vysledek.tisk(); vysledek = castka1.minus(new Koruny(7.08)); vysledek.tisk(); Koruny castka3 = new Koruny(5.94); vysledek = castka3.nasobeni(1.28); vysledek.tisk();

Celková aplikace Diagram tříd celé aplikace. 25

public class Ucet { private int cislo; private Koruny stav; Třída Ucet // Konstruktory tridy Ucet public Ucet(){ this(0, 0); public Ucet(int cislo, double castka) { this(cislo, new Koruny(castka)); public Ucet(int cislo, Koruny stav) { this.cislo = cislo; this.stav = stav; public void vlozeni (double castka) { // vyvola metodu vlozeni s parametrem Koruny this.vlozeni(new Koruny(castka));

public void vlozeni(koruny castka) { stav = stav.plus(castka); public Koruny vyber (double castka) { // vyvola metodu vyber s parametrem Koruny return this.vyber(new Koruny(castka)); Třída Ucet public Koruny vyber(koruny castka) { stav = stav.minus(castka); return getstav(); public Koruny getstav(){ return stav; public String tostring() { return String.format("Ucet cislo: %d stav uctu: %s", getcislo(), getstav().tostring());

public class Student { private String jmeno; private Ucet mujucet; public Student(String jmeno, Ucet ucet){ this.jmeno = jmeno; mujucet = ucet; // agregace public Ucet getucet() { return mujucet; public void setucet(ucet ucet) { mujucet = ucet; public void vlozeni(double castka) { // vyvola metodu vlozeni s parametrem Koruny this.vlozeni(new Koruny(castka));

public void vlozeni(koruny koruny) { this.getucet().vlozeni(koruny); public Koruny vyber(double castka) { // vyvola metodu vyber s parametrem Koruny return this.vyber(new Koruny(castka)); public Koruny vyber(koruny koruny) { return this.getucet().vyber(koruny); public String tostring() { return String.format("Jmeno: %s \n%s", getjmeno(), getucet().tostring()); public void tisk() { System.out.println(toString());

Deklarace tříd s přetíženými konstruktory Přetěžování konstruktorů je důležité. Pro přetěžování se využívá pseudoproměnná this, která v dané třídě znamená, že odkazuje sama na sebe. Takže pokud je v následujícím příkladu uvedeno v těle konstruktoru this(0, 0, 0); 30

Třída Time Prakticky uvedeme třídu Time s přetíženými konstruktory a validačními metodami, které ošetří možné chyby zadání nesprávného času. 31

public class Time { private int hodina; // 0-23 private int minuta; // 0-59 private int vterina; // 0 59 // konstruktory public Time() { this( 0, 0, 0 ); public Time( int h ) { this( h, 0, 0 ); public Time( int h, int m ) { this( h, m, 0 ); public Time( int h, int m, int v ) { // vyvola metodu settime k validaci casu settime( h, m, v ); // kopirovaci konstruktor public Time( Time time ) { this( time.gethodina(), time.getminuta(), time.getvterina() );

public void settime( int h, int m, int v ) { sethodina( h ); setminuta( m ); setvterina( v); public void sethodina( int h ) { hodina = ( ( h >= 0 && h < 24 )? h : 0 ); public void setminuta( int m ) { minuta = ( ( m >= 0 && m < 60 )? m : 0 ); public void setvterina( int v ) { vterina = ( ( v >= 0 && v < 60 )? v : 0 ); public int gethodina() { return hodina; public int getminuta() { return minuta; public int getvterina() { return vterina;

// prevede na String v universalnim casovem // formatu (HH:MM:SS) public String touniversalstring() { return String.format("%02d:%02d:%02d", gethodina(), getminuta(), getvterina() ); // prevede na String ve standardnim casovem formatu // (H:MM:SS AM nebo PM) public String tostring() { return String.format( "%d:%02d:%02d %s", ( (gethodina() == 0 gethodina() == 12)? 12 : gethodina() % 12 ), getminuta(), getvterina(), ( gethodina() < 12? "AM" : "PM" ) ); public void printu() { System.out.println(" "+this.touniversalstring()); public void prints() { System.out.println(" "+this.tostring());

public void tisk() { System.out.printf("%s %03d %2d %2d","Aktualni cas: ", gethodina(),getminuta(), getvterina());

public class TimeTest { public static void main(string[] args) { Time t1 = new Time(); // 00:00:00 Time t2 = new Time( 2 ); // 02:00:00 Time t3 = new Time( 21, 34 ); // 21:34:00 Time t4 = new Time( 12, 25, 42 ); // 12:25:42 Time t5 = new Time( 27, 74, 99 ); // 00:00:00 Time t6 = new Time( t4 ); // 12:25:42 System.out.println( "Vytvoreno s:" ); System.out.println( "t1: vsechny argumenty defaultni" ); t1.printu(); t1.prints(); System.out.println( "t2: specifikovana hodina; minuta a vterina defaultni"); t2.printu(); t2.prints(); System.out.println( "t3: specifikovana hodina a minuta; vterina defaultni"); t3.printu(); t3.prints();

System.out.println( "t4: specifikovana hodina, minuta a vterina"); t4.printu(); t4.prints(); System.out.println( "t5: specifikovany vsechny neplatne hodnoty" ); t5.printu(); t5.prints(); System.out.println( "t6: ma specifikovane hodnoty objekty t4" ); t6.printu(); t6.prints();

Pole jako datový atribut Třída Student má pole známek a pole oblíbených jídel. Pole známek obsahuje pouze celá číslo v rozsahu 1.. 3. Pole oblíbených jídel je pole řetězců. Cíl blíže se seznámit s práci s poli. 38

import javax.swing.joptionpane; public class Student { private String jmeno; private int[] zkousky = {1, 3, 2, 2, 1; private String[] oblibenajidla; public Student() { jmeno = "nezadane"; oblibenajidla = new String[1]; oblibenajidla[0] = "nezadana"; public Student(String jmeno){ this.jmeno = jmeno; initoblibenajidla(); public String getjmeno() { return jmeno; public String[] getoblibenajidla(){ return oblibenajidla;

public int[] getzkousky() { return zkousky; public void setjmeno(string jmeno) { this.jmeno = jmeno; public void setoblibenajidla(string[] jidla) { oblibenajidla = jidla; public void setzkousky(int[] zkousky) { this.zkousky = zkousky; public String tostring() { return String.format("Jmeno: %s \noblibena jidla + %s\nzkousky %s\nprumer: %.2f", getjmeno(), jidlatostring(), zkouskytostring(), getprumer());

public String jidlatostring() { String s = ""; for(int i = 0; i < getoblibenajidla().length; i++) s += "\n" + (i + 1) + " " + oblibenajidla[i]; return s; public String zkouskytostring() { String s = ""; for(int i = 0; i < getzkousky().length; i++) s += "\n" + (i + 1) + " " + zkousky[i]; return s; public void tisk() { public void tisk() { System.out.println(toString());

public void initoblibenajidla() { String odpoved = JOptionPane.showInputDialog("Pocet oblibenych jidel: "); int pocet = Integer.parseInt(odpoved); oblibenajidla = new String[pocet]; for(int i = 0; i < pocet; i++) { odpoved = JOptionPane.showInputDialog("Jidlo [" + (i+1) + "] "); oblibenajidla[i] = odpoved; public double getprumer() { double vysledek = 0; for (int i = 0; i < getzkousky().length; i++) vysledek += zkousky[i]; vysledek = vysledek / getzkousky().length; return vysledek; public String prumertostring() { return ""+ getprumer();

1 public class StudentTest { 2 public static void main(string[] args) { 3 Student student = new Student("Eva"); 4 student.tisk(); 5 String[] jidlo = {"cocka s vejci", "vepro knedlo zelo", 6 "michana zelenina"; 7 int[] vysledky = {3, 3, 2, 1 ; 8 student.setoblibenajidla(jidlo); 9 student.setzkousky(vysledky); 10 student.tisk();

Případová studie Karty K dispozici 52 karet, mají barvu a hodnotu. Deklarace třídy Karta se dvěma atributy výčtového typu. Uložení hodnot karet do pole. 44

public enum Barva { Krize, Herce, Kary, Piky 1 public class BarvaTest { 2 public static void main(string[] args) { 3 Barva bp = Barva.Piky; 4 Barva bh = Barva.Herce; 5 if(bp == Barva.Piky) System.out.println("ANO Piky"); 6 else System.out.println("Ne Piky"); Možnosti výčtových typů 7 // jedna moznost pruchodu vyctovymi hodnotami 8 for(barva bv: Barva.values()) 9 System.out.println("Barva: " + bv); 10 System.out.println(); // prazdny radek ve vypisu 11 // klasicka moznost pruchodu vyctovymi hodnotami 12 Barva[] pole = Barva.values(); 13 for(int i = 0; i < pole.length; i++) 14 System.out.println("Barva: " + pole[i]);

public enum Hodnota { Eso, Dve, Tri, Ctyri, Pet, Sest, Sedm, Osm, Devet, Deset, Kluk, Dama, Kral

public class Karta { private final Hodnota hodnota; // hodnota karty private final Barva barva; // barva karty // konstruktor public Karta( Hodnota kartahodnota, Barva kartabarva ) { hodnota = kartahodnota; // inicializace hodnoty karty barva = kartabarva; // inicializace barvy karty public Hodnota gethodnota() { return hodnota; public Barva getbarva() { return barva; public String tostring() { return String.format( "%s %s", gethodnota(), getbarva());

import java.util.list; import java.util.arrays; import java.util.collections; 1 public class BalicekKaret { 2 private Karta[] balicek = new Karta[52]; 3 private int count = 0; // pocet karet index pro pole 4 5 private List< Karta > list; // deklarace seznamu karet 6 7 // vytvoreni balicku karet = konstruktor 8 public BalicekKaret() { 9 for(barva barva: Barva.values()) { 10 for(hodnota hodnota: Hodnota.values()) { 11 balicek[count] = new Karta(hodnota, barva); 12 count++; 13 14 15 list = Arrays.asList( balicek ); // vytvori List 16

17 public Karta[] getbalicek() { 18 return balicek; 19 20 public void zamichanikaret() { 21 Collections.shuffle(list); 22 23 public void tiskseznamukaret() { 24 // zobrazi 52 karet ve dvou sloupcich 25 for ( int i = 0; i < list.size(); i++ ) 26 System.out.printf( "%-20s%s", list.get( i ), 27 ( ( i + 1 ) % 2 == 0 )? "\n" : "" ); 28 29 public void tiskkaret() { 30 for( int i = 0; i < getbalicek().length; i++) 31 System.out.printf( "%-20s%s", balicek[i], 32 ( ( i + 1 ) % 2 == 0 )? "\n" : "" ); 33 System.out.println();

public class BalicekKaretTest { public static void main(string[] args) { BalicekKaret balicek = new BalicekKaret(); balicek.tiskkaret(); balicek.zamichanikaret(); balicek.tiskseznamukaret();