Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde

Cvičení k 4. lekci OOP v Javě

Java Objektově orientované programování Cvičení k 4. lekci OOP v Javě American English version English version

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Následující 3 cvičení vám pomohou procvičit znalosti objektově orientovaného programování v Javě z minulé lekce. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulého tutoriálu a pokuste se na to přijít.

Ohlasy studentů

Jednoduchý příklad

Naprogramujte aplikaci, ve které figurují dva typy objektů - Pes a Osoba. Pes má jméno, věk a metodu, která ho nechá zestárnout o jeden rok. Osoba má jméno a psa. V aplikaci si vytvořte jednoho psa a vypište jeho věk. Tohoto psa následně přiřaďte dvěma osobám. Psa první osoby nechte zestárnout o 1 rok a psa druhé osoby nechte také zestárnout o 1 rok. Tyto dva kroky mohou v kódu vypadat např. takto:

karel.pes.zestarni();
lenka.pes.zestarni();

Nakonec vypiště věk psa libovolné osoby, který bude o 2 roky vyšší, než věk na začátku programu. Ověříte si tak, že májí obě osoby opravdu referenci na jednoho a toho samého psa.

Ukázka obrazovky programu:

Konzolová aplikace
Azor (1 let)
Azor (3 let)

public class Osoba {
}
public class Pes {
}

Středně pokročilý příklad

Naprogramujte jednoduchou textovou hru, která obsahuje následujících 7 propojených lokací:

Cvičení k Java OOP – Mapa k textové hře

Každá lokace má název a textový popis, tato data budou následovat dále. Každá lokace má také referenci na 4 okolní lokace (tedy na lokaci na severu, jihu, západě a východě). Vytvořte herní svět z takto propojených lokací podle obrázku výše. Následně aplikaci naučte přijímat v cyklu příkazy od uživatele. Příkazy jsou:

  • jdi na [strana], např. "jdi na východ" - Jde na určitou světovou stranu
  • konec - Ukončí aplikaci

Použijte následující názvy lokací a jejich popisy včetně zachování odřádkování. Odpovídají lokacím v obrázku (zleva doprava, shora dolů):

Název Popis
Hrad Stojíš před okovanou branou gotického hradu, která je zřejmě jediným vchodem do pevnosti.
Klíčová dírka je pokryta pavučinami, což vzbuzuje dojem, že je budova opuštěná.
Les Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího
slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.
Lesní rozcestí Nacházíš se na lesním rozcestí.
Les Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího
slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.
Rybník Došel jsi ke břehu malého rybníka. Hladina je v bezvětří jako zrcadlo. Kousek
od tebe je dřevěná plošina se stavidlem.
Les Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího
slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.
Dům Stojíš před svým rodným domem, cítíš vůni čerstvě nasekaného dřeva, která se line
z hromady vedle vstupních dveří.

Počáteční lokace je lokace Dům.

Při pokusu o přechod na neplatnou lokaci program vypíše "Tímto směrem nelze jít."

Při zadání neplatného příkazu program vypíše "Můj vstupní slovník neobsahuje tento příkaz."

Ukázka obrazovky programu:

Konzolová aplikace
Les
Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího
slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.

Můžeš jít na sever východ

Zadej příkaz:
jdi na sever
Lesní rozcestí
Nacházíš se na lesním rozcestí.

Můžeš jít na jih západ východ

Zadej příkaz:
jdi na východ
Les
Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího
slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.

Můžeš jít na západ východ

Zadej příkaz:
jdi na východ
Rybník
Došel jsi ke břehu malého rybníka. Hladina je v bezvětří jako zrcadlo. Kousek
od tebe je dřevěná plošina se stavidlem.

Můžeš jít na západ

public class Hra {
}
public class Lokace {
}

Z důvodu dynamického množství vstupů, hru vyzkoušejte ve vašem IDE a zde ji předejte až k ohodnocení.

Pokud vás nenapadá, jakým způsobem mezi lokacemi procházet, zamyslete se nad referencí na lokaci, ve které právě jste.

Pokročilý příklad

Naprogramujte aplikaci evidující rodokmen Barta Simpsona a Homera Simpsona. Použijte k tomu následující data:

Rodokmen rodiny Simpsnů

V aplikaci budou figurovat osoby. Každá osoba má referenci na otce a matku, kteří jsou sami osobami.

Sestavte v paměti strom z napojených instancí osob tak, jak je na obrázku výše.

V druhém kroku se pokuste vypsat rodokmeny Barta Simpsona a Homera Simpsona tak, jak je to vidět na screenshotu níže.

Ukázka obrazovky programu:

Konzolová aplikace
Rodokmen pro osobu Bart Simpson
Bart Simpson
Homer Simpson
Abraham Simpson
Penelope Olsen
Marge Bouvier
Pan Bouvier
Jackie Bouvier

Rodokmen pro osobu Homer Simpson
Homer Simpson
Abraham Simpson
Penelope Olsen

public class Osoba {
}
public class Rodokmen {
}

Pokud jste vytvořili v paměti správně napojený strom, máte kus práce za sebou. Rodokmen vypíšete tak, že vypíšete jméno kořenu a přesunete se do jeho dvou větví (do otce a matky). Nyní máte další dva kořeny, ve kterých uděláte to samé. Dostanete další 4 a tak se celá situace opakuje, dokud neprojedete celý strom. Úlohu lze nejlépe řešit tzv. rekurzí. To je programátorská technika, kdy určitá metoda volá sebe sama s jinými parametry. Dokážete na řešení přijít? :)

Datové struktuře, kterou jste vytvořili, se říká opravdu strom. V našem případě se jedná o vyvážený binární strom, kterému se říká halda. Stromy se často používají v algoritmizaci pro ukládání dat, protože mají narozdíl od klasických seznamů speciální vlastnosti. Zájemce odkáži na Kurzy algoritmů.


 

Stáhnout

Staženo 773x (67.92 kB)
Aplikace je včetně zdrojových kódů v jazyce java

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
6 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Miniatura
Následující článek
Bojovník do arény
Aktivity (17)

 

 

Komentáře
Zobrazit starší komentáře (30)

Avatar
Stanislav Čapek:11. ledna 20:52

Ten poslední příklad mi tedy dal zabrat :) ale přistoupil jsem k tomu trošku jinak. Každopádně pomocí rekurze a výsledek je stejný.

1. Class Rodokmen

public class Rodokmen {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // založení všech osob
        Osoba bart = new Osoba("Bart Simpson");
        Osoba homer = new Osoba("Homer Simpson");
        Osoba herb = new Osoba("Herb Powers");
        Osoba penelope = new Osoba("Penelope Olsen");
        Osoba abraham = new Osoba("Abraham Simpson");
        Osoba marge = new Osoba("Marge Bouvier");
        Osoba selma = new Osoba("Selma Bouvier");
        Osoba jackie = new Osoba("Jackie Bouvier");
        Osoba pan = new Osoba("Pan Bouvier");

        // přiřazení potomků
        bart.matka = marge;
        bart.otec = homer;
        homer.matka = penelope;
        homer.otec = abraham;
        marge.matka = jackie;
        marge.otec = pan;
        selma.matka = jackie;
        selma.otec = pan;
        herb.matka = penelope;
        herb.otec = abraham;

        //výpis rodokmene
        System.out.printf("Rodokmen pro osobu %s \n", bart);
        bart.vypis(bart);
        System.out.printf("Rodokmen pro osobu %s \n", homer);
        homer.vypis(homer);
    }

}

Již samotná class Osoba

public class Osoba {
    // jméno osoby
    public String jmeno;
    //proměné pro uložení předků
    public Osoba matka;
    public Osoba otec;

    public Osoba(String jmeno) {
        this.jmeno = jmeno;
    }

    //Samotná metoda vypis(), která se stará o vypsání aktuální osoby a její
    //předků.
    public void vypis(Osoba o) {
        //vypíše kořen osoby
        System.out.println(o.jmeno);
        // Podmínky - existuje matka? a zároveň existuje otec?
       if((this.matka != null) && (this.otec != null)) {
           // zvolání rekurze - na proměné Osoba otec s parametrem Osoba otec
           otec.vypis(otec);
           // zvolání rekurze - na proměné Osoba matka s parametrem Osoba matka
           matka.vypis(matka);
       }
    }

    @Override
    public String toString() {
        return jmeno;
    }

}
 
Odpovědět 11. ledna 20:52
Avatar
Rastislav Mikláš:11. března 18:02

Moje riešenie k druhej úlohe, napriek tomu, že je to spravené asi príliš zložito, i tak ma teší, že som nemusel nahliadnuť do zdrojáku :)

1.Trieda Lokalita

package strednepokrocilypriklad;

public class Lokalita {

    private String meno;
    private String popis;

    private Lokalita sever;
    private Lokalita vychod;
    private Lokalita juh;
    private Lokalita zapad;

    public Lokalita(String meno, String popis) {
        this.meno = meno;
        this.popis = popis;
        this.sever = null;
        this.vychod = null;
        this.juh = null;
        this.zapad = null;
    }

    public String getMeno() {
        return this.meno;
    }

    public String getPopis() {
        return this.popis;
    }

    public Lokalita getJuh() {
        return this.juh;
    }

    public Lokalita getSever() {
        return this.sever;
    }

    public Lokalita getVychod() {
        return this.vychod;
    }

    public Lokalita getZapad() {
        return this.zapad;
    }

    public void setJuh(Lokalita juh) {
        this.juh = juh;
    }

    public void setSever(Lokalita sever) {
        this.sever = sever;
    }

    public void setVychod(Lokalita vychod) {
        this.vychod = vychod;
    }

    public void setZapad(Lokalita zapad) {
        this.zapad = zapad;
    }

}

2. Trieda HernySvet, kde vytváram dané lokality

package strednepokrocilypriklad;

public class HernySvet {

    private Lokalita aktualnaLokalita;

    private Lokalita hrad;
    private Lokalita lesElfov;
    private Lokalita lesnePriecestie;
    private Lokalita trollovMost;
    private Lokalita jazero;
    private Lokalita normalnyLes;
    private Lokalita horskaChata;

    public HernySvet() {
        this.vytvorLokality();
        this.nastavLokality();
    }

    public void setAktualnaLokalita(Lokalita aktualnaLokalita) {
        this.aktualnaLokalita = aktualnaLokalita;
    }

    public Lokalita getAktualnaLokalita() {
        return this.aktualnaLokalita;
    }

    private void vytvorLokality() {
        this.hrad = new Lokalita("Hrad", "Nachádzaš sa na hrade kráľa Zaragora. Kráľ, pôvodne čestný človek, bol začarovaný"
                + " kúzlami elfov, nachádzajúcich sa v lese nedaľeko hradu. Musíš sa dostať k horskej chate, kde nájdeš liek"
                + " pre kráľa Zaragora!");
        this.lesElfov = new Lokalita("Les elfov", "V tomto lese neradno sa dlho zdržiavať. Všade navôkol počuť šuštanie lístia"
                + " a zlomyselný smiech elfov, ktorí čakajú na svoju obeť.");
        this.lesnePriecestie = new Lokalita("Lesné priecestie", "Stromy, štebot vtákov, drevenná závora. Vyzerá to ako neškodné"
                + " lesné priecestie, avšak daj pozor, voľba smeru môže výrazne ovplyvniť tvoju bezpečnosť!");
        this.trollovMost = new Lokalita("Trollov most", "Chýry miestnych ľudí naznačujú, že pod mostom, na ktorom sa práve nachádzaš"
                + " žije hlúpy, no zato obrovský a nemilosrdný troll. Nevieš čo je na tom pravdy, avšak sliz, ktorý ti zmáča"
                + " topánky, môže niečo naznačovať.");
        this.jazero = new Lokalita("Jazero", "Aké krásne vidieť odrážajúce sa slnečné lúče na vlnách jazera. Rybky spokojne"
                + " plávajú, labute plachtia so svojim partnerom, iba tebe akosi niečo chýba, niesi hladný?");
        this.normalnyLes = new Lokalita("Les drevorubačov", "Hlasité zatnutie sekery môže znamenať civilizáciu. Áno, "
                + "predsalen si sa dostal o výrazný kus bližšie. Stačí prejsť okolo skupinky pracovitých drevorubačov"
                + " a dostaneš sa k svojmu cieľu!");
        this.horskaChata = new Lokalita("Horská chata", "Čo to je za obrys, dole v tom hmlistom údolí? Ak ma zrak nešiali"
                + ", mala by to byť horská chata, ktorú hľadám. Och áno, je to to miesto, našiel som liek pre kráľa,"
                + " Zaragor je zachránený a s nim aj naše obyvateľstvo!");
    }

    private void nastavLokality() {
        this.hrad.setVychod(this.lesElfov);
        this.lesElfov.setZapad(this.hrad);
        this.lesElfov.setVychod(this.lesnePriecestie);
        this.lesnePriecestie.setZapad(this.lesElfov);
        this.lesnePriecestie.setVychod(this.trollovMost);
        this.lesnePriecestie.setJuh(this.normalnyLes);
        this.trollovMost.setZapad(this.lesnePriecestie);
        this.trollovMost.setVychod(this.jazero);
        this.jazero.setZapad(this.trollovMost);
        this.normalnyLes.setSever(this.lesnePriecestie);
        this.normalnyLes.setVychod(this.horskaChata);
        this.horskaChata.setZapad(this.normalnyLes);
        this.aktualnaLokalita = this.hrad;
    }

    public String mozneSmery() {
        String str = "Môžeš ísť týmito smermi: ";
        if(this.aktualnaLokalita.getSever() != null) {
            str += "sever, ";
        }
        if(this.aktualnaLokalita.getVychod() != null) {
            str += "vychod, ";
        }
        if(this.aktualnaLokalita.getJuh() != null) {
            str += "juh, ";
        }
        if(this.aktualnaLokalita.getZapad() != null) {
            str += "zapad";
        }

        return str;
    }

}

3. Trieda Tokenizer, kde kontrolujem správnosť zadaných príkazov

package strednepokrocilypriklad;

public class Tokenizer {

    private final String[] platnePrikazy = {"chod sever", "chod vychod", "chod juh", "chod zapad", "koniec"};

    public boolean jePlatny(String prikaz) {
        for(int i = 0; i < this.platnePrikazy.length; i++) {
            if(this.platnePrikazy[i].equals(prikaz)) {
                return true;
            }
        }

        return false;
    }

}

4. Trieda Hra, obsahuje herný cyklus, nakoniec v Main zavolám inštanciu tejto triedy

package strednepokrocilypriklad;

import java.util.Scanner;

public class Hra {

    private Scanner sc;
    private HernySvet svet;
    private boolean jeKoniec;
    private Tokenizer tokenizer;
    private String prikaz;

    public Hra() {
        this.sc = new Scanner(System.in);
        this.svet = new HernySvet();
        this.jeKoniec = false;
        this.tokenizer = new Tokenizer();
        this.zacniHru();
    }

    private void zacniHru() {
        while(!this.jeKoniec) {
            System.out.println("Aktuálna lokalita: " + this.svet.getAktualnaLokalita().getMeno());
            System.out.println(this.svet.getAktualnaLokalita().getPopis());

            System.out.println();
            System.out.println(this.svet.mozneSmery());
            System.out.println();

            System.out.println("Zadaj príkaz:");
            this.zadajPrikaz(sc.nextLine());

            System.out.println();
        }
    }

    private void zadajPrikaz(String prikaz) {
        if(this.tokenizer.jePlatny(prikaz)) {
            switch(prikaz) {
                case "chod sever":
                    if(this.svet.getAktualnaLokalita().getSever() != null) {
                        Lokalita novaLokalita = this.svet.getAktualnaLokalita().getSever();
                        this.svet.setAktualnaLokalita(novaLokalita);
                    } else {
                        System.out.println("Nie je možné ísť týmto smerom.");
                    }
                    break;

                case "chod vychod":
                    if(this.svet.getAktualnaLokalita().getVychod() != null) {
                        Lokalita novaLokalita = this.svet.getAktualnaLokalita().getVychod();
                        this.svet.setAktualnaLokalita(novaLokalita);
                    } else {
                        System.out.println("Nie je možné ísť týmto smerom.");
                    }
                    break;

                case "chod juh":
                    if(this.svet.getAktualnaLokalita().getJuh() != null) {
                        Lokalita novaLokalita = this.svet.getAktualnaLokalita().getJuh();
                        this.svet.setAktualnaLokalita(novaLokalita);
                    } else {
                        System.out.println("Nie je možné ísť týmto smerom.");
                    }
                    break;

                case "chod zapad":
                    if(this.svet.getAktualnaLokalita().getZapad() != null) {
                        Lokalita novaLokalita = this.svet.getAktualnaLokalita().getZapad();
                        this.svet.setAktualnaLokalita(novaLokalita);
                    } else {
                        System.out.println("Nie je možné ísť týmto smerom.");
                    }
                    break;

                case "koniec":
                    this.jeKoniec = true;
                    break;
            }
        } else {
            System.out.println("NEPLATNÝ PRÍKAZ");
        }
    }

}
 
Odpovědět 11. března 18:02
Avatar
Michal Navrátil:4. listopadu 13:06

Ahoj, nevíte někdo proč mi po vložení kódu k odevzdání (a následném spuštění) vyskakuje hláška: "Error - no file given" ?? V NetBeans kód běží jak má... Díky!

 
Odpovědět 4. listopadu 13:06
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Michal Navrátil
David Jančík:4. listopadu 13:25

Omlouváme se, došlo k přehlcení serveru. Již by to mělo fungovat. V brzké době provedeme migraci do cloudu, aby nedocházelo ke zpomalování. Díky za pochopení.

Odpovědět 4. listopadu 13:25
Čím více času dostaneš, tím méně ho máš.
Avatar
Ondřej Čoček:14. listopadu 14:21

Už druhou úlohu řeším třetí den, jede mi si myslím bezchybně, ale kód prostě úspěšně nenahraji. Zkontroloval jsem si myslím všechno, ale pořád ne a ne. Myslím, že neošetřuji nějaký vstup podle chybové hlášky... Prosím o pomoc :-?

1.třída Main

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in, "UTF-8");

        Lokace hrad = new Lokace("Hrad", "Stojíš před okovanou branou gotického hradu, která je zřejmě jediným vchodem do pevnosti.\n" +
                "Klíčová dírka je pokryta pavučinami, což vzbuzuje dojem, že je budova opuštěná.", 0, 0, 0, 1);
        Lokace lesHrad = new Lokace("Les", "Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího\n" +
                "slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.", 0, 0, 1, 1);
        Lokace lesniRozcesti = new Lokace("Lesní rozcestí", "Nacházíš se na lesním rozcestí.", 0, 1, 1, 1);
        Lokace lesRybnik = new Lokace("Les", "Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího\n" +
                "slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.", 0, 0, 1, 1);
        Lokace lesDum = new Lokace("Les", "Jsi na lesní cestě, která se klikatí až za obzor, kde mizí v siluetě zapadajícího\n" +
                "slunce. Ticho podvečerního lesa občas přeruší zpěv posledních ptáků.", 1, 0, 0, 1);
        Lokace rybnik = new Lokace("Rybník", "Došel jsi ke břehu malého rybníka. Hladina je v bezvětří jako zrcadlo. Kousek\n" +
                "od tebe je dřevěná plošina se stavidlem.", 0, 0, 1, 0);
        Lokace dum = new Lokace("Dům", "Stojíš před svým rodným domem, cítíš vůni čerstvě nasekaného dřeva, která se line\n" +
                "z hromady vedle vstupních dveří.", 0, 0, 1, 0);

        hrad.nastavSmery(hrad, hrad, lesHrad, hrad);
        lesHrad.nastavSmery(lesHrad, lesHrad, lesniRozcesti, hrad);
        lesniRozcesti.nastavSmery(lesniRozcesti, lesDum, lesRybnik, lesHrad);
        lesRybnik.nastavSmery(lesRybnik, lesRybnik, rybnik, lesniRozcesti);
        lesDum.nastavSmery(lesniRozcesti, lesDum, dum, lesDum);
        rybnik.nastavSmery(rybnik, rybnik, rybnik, lesRybnik);
        dum.nastavSmery(dum, dum, dum, lesDum);

        Game game = new Game(dum);
        System.out.print(game);
        game.vypisSmeru();

        Boolean pokracuj = true;
        String vstup;
        Boolean spatnySmer = false;

            while(pokracuj){

                if(spatnySmer){
                    System.out.print("Tenhle směr není v nabídce!\n");
                    spatnySmer = false;
                    //break;
                }

            System.out.print("Zadej příkaz 'jdi na' + sever/jih/západ/východ: ");
            vstup = sc.nextLine();
            vstup = vstup.toLowerCase();

            switch (vstup) {
                case "jdi na sever":
                    if(game.getAsmery(0) != 1) {
                        spatnySmer = true;
                        break;
                   }
                    game.presun("sever");
                    System.out.print(game);
                    game.vypisSmeru();
                    break;
                case "jdi na jih":
                    if(game.getAsmery(1) != 1) {
                        spatnySmer = true;
                        break;
                    }
                    game.presun("jih");
                    System.out.print(game);
                    game.vypisSmeru();
                    break;
                case "jdi na východ":
                    if(game.getAsmery(3) != 1) {
                        spatnySmer = true;
                        break;
                    }
                    game.presun("vychod");
                    System.out.print(game);
                    game.vypisSmeru();
                    break;
                case "jdi na západ":
                    if(game.getAsmery(2) != 1) {
                        spatnySmer = true;
                        break;
                    }
                    game.presun("zapad");
                    System.out.print(game);
                    game.vypisSmeru();
                    break;
                case "konec":
                    pokracuj = false;
                    break;
                default:
                    System.out.print("Nezadal jsi požadovaný vstup 'jdi na ' + sever/jih/západ/východ!!!\n");
                    break;
            }


        }
    }
}

2. třída Game

public class Game {
    public Lokace lokace;

    private int[] aSmery = new int[4];

    public Game(Lokace lokace){
        this.lokace = lokace;
    }

    public int getAsmery(int a){
        return aSmery[a];
    }

    public void vypisSmeru(){
        aSmery[0] = lokace.sever;
        aSmery[1] = lokace.jih;
        aSmery[2] = lokace.zapad;
        aSmery[3] = lokace.vychod;

        System.out.print("Můžeš jít na ");

        for(int i = 0; i < 4; i++)
        {
            if(aSmery[i] != 0)
            {
                switch(i){
                    case 0:
                        System.out.print("sever ");
                        break;
                    case 1:
                        System.out.print("jih ");
                        break;
                    case 2:
                        System.out.print("západ ");
                        break;
                    case 3:
                        System.out.print("východ");
                        break;
                }
            }
        }

        System.out.print("\n\n");
    }

    public void presun(String strana){

        switch(strana){
            case "sever":
                lokace = lokace.getS();
                break;
            case "jih":
                lokace = lokace.getJ();
                break;
            case "vychod":
                lokace = lokace.getV();
                break;
            case "zapad":
                lokace = lokace.getZ();
                break;
        }
    }

    @Override
    public String toString(){
        return String.format("%s\n%s\n\n", lokace.jmeno, lokace.popis);
    }
}

3. třída Lokace

public class Lokace {
    public String jmeno;
    public String popis;

    public int sever;
    public int jih;
    public int vychod;
    public int zapad;

    private Lokace s;
    private Lokace j;
    private Lokace v;
    private Lokace z;

    public Lokace getS(){
        return s;
    }

    public Lokace getJ(){
        return j;
    }

    public Lokace getV(){
        return v;
    }

    public Lokace getZ(){
        return z;
    }

    /*public void setZ(Lokace z){
        this.z = z;
    }*/


    public Lokace(String jmeno, String popis, int sever, int jih, int zapad, int vychod){
        this.jmeno = jmeno;
        this.popis = popis;

        this.sever = sever;
        this.jih = jih;
        this.vychod = vychod;
        this.zapad = zapad;

    }

    public void nastavSmery(Lokace s, Lokace j, Lokace v, Lokace z){
        this.s = s;
        this.j = j;
        this.v = v;
        this.z = z;
    }
}
 
Odpovědět 14. listopadu 14:21
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Ondřej Čoček
David Jančík:14. listopadu 15:33

Je potřeba abys měl pojmenované třídy stejně jako soubory (Game = Hra) a vše bylo v balíčcích (package prochazeni;).
U cvičení nebyly uvedeny chybné výstupy, doplnil jsem je:
Při pokusu o přechod na neplatnou lokaci program vypíše "Tímto směrem nelze jít."
Při zadání neplatného příkazu program vypíše "Můj vstupní slovník neobsahuje tento příkaz."
Zadání příkazu má být jen zkráceně a s odřádkováním System.out.println("Zadej příkaz: ");

Odpovědět  +1 14. listopadu 15:33
Čím více času dostaneš, tím méně ho máš.
Avatar
Ondřej Čoček:15. listopadu 19:34

Opravil jsem vše ale stejně mi to pořád vyhazuje následující:

Zadej příkaz:
Exception in thread "main" java.util.NoSuchElementException: No line found
        at java.util.Scanner.nextLine(Scanner.java:1540)
 
Odpovědět 15. listopadu 19:34
Avatar
Fíla N.
Člen
Avatar
Odpovídá na Ondřej Čoček
Fíla N.:16. listopadu 22:40

A odevzdáváš to rovnou nebo to spouštíš? Pokud to spouštíš tady na stránkách tak bych to být tebou zkusil rovnou odevzdat a uvidíš.

 
Odpovědět 16. listopadu 22:40
Avatar
Fíla N.
Člen
Avatar
Fíla N.:16. listopadu 23:29

Ahoj,
přijde mi, že v tom vašem řešení pro druhý příklad projde i chybný příkaz. Příkaz by podle zadání měl být např. "jdi na sever". Vám ale díky podmínce začínání řetězce na "jdi" a končení na světovou stranu projdou věci jako "jdi nananananna jih" apod. , což by podle mě mělo spadnout do neznámého příkazu.

PS. ten druhý příklad mě skoro stál klávesnici :D

Editováno 16. listopadu 23:31
 
Odpovědět 16. listopadu 23:29
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Fíla N.
David Jančík:16. listopadu 23:34

Nikoliv, programu je předán vstup, který zpracuje a následně je porovnán výstup. U výstupu se porovnává aktuální lokace a možné směry. Test pak pokračuje zkoušením různých akcí. Jediné, co nemusí být přesné jsou popisky lokací. Pokud ti přijde, že něco zlobí a zkoušel jsi to už všemožně, tak mi pošli do zpráv kód, podívám se na to.

Odpovědět 16. listopadu 23:34
Čím více času dostaneš, tím méně ho máš.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 40. Zobrazit vše