NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 6 - Bojovník do arény

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Marek Zelený
Tvůrce
Avatar
Marek Zelený:22.10.2017 19:54

David Hartinger Mám pocit, že kód, který upravuje zprávu v metodě branSe, není úplně vychytaný. Nejdříve totiž přímo zasahuje do privátní proměnné "zprava" a upravuje ji, ale na konci ještě používá metodu nastavZpravu, které navíc jako argument předává tu samou proměnnou, kterou metoda upravuje.

private String zprava;

private void nastavZpravu(String zprava) {
        this.zprava = zprava;
}

public void branSe(int uder) {
        int zraneni = uder - (obrana + kostka.hod());
        if (zraneni > 0) {
                zivot -= zraneni;
                zprava = String.format("%s utrpěl poškození %s hp", jmeno, zraneni);
                if (zivot <= 0) {
                        zivot = 0;
                        zprava += " a zemřel";
                }

        } else
                zprava = String.format("%s odrazil útok", jmeno);
        nastavZpravu(zprava);
}

V metodě branSe tedy nejspíš chybí deklarace vlastní proměnné "zprava", kterou by pak předala metodě nastavZpravu (když už je potřeba to dělat přes ni) a tím ji uložila do proměnné samotné instance bojovníka. Takhle ten kód z mého pohledu nedává smysl.

 
Odpovědět
22.10.2017 19:54
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Marek Zelený
David Hartinger:22.10.2017 20:18

Pravda, na začátku by měla být deklarována lokální proměnná String zprava;. Při další revizi kurzu to opravím, na funkčnost to nemá vliv.

Odpovědět
22.10.2017 20:18
New kid back on the block with a R.I.P
Avatar
 
Odpovědět
24.10.2017 15:27
Avatar
Martin Konečný:19.3.2019 11:06

Ahoj,

chtěl bych požádat o vysvětlení ohledně výpisu zpráv. Nechápu jakým způsobem se používá ta proměnná "zprava".
Při útoku bojovníka se v metodě utoc do proměnné "zprava" uloží text zprávy o útoku. Vzápětí se v metodě branSe do té samé proměnné uloží jiná zpráva. Takže jsem se domníval, že tím se ta původní zpráva přepíše.
Samozřejmě to asi bude tak, že oba bojovníci ukládají ten text do své vlastní proměnné "zprava".
No ale tomu právě nerozumím. Nikde jsme tomu danému bojovníkovi nepřidělili vlastní proměnou "zprava". Zdánlivě tedy oba používají jednu a tu samou proměnnou "zprava", která patří dané třídě a mělo by tedy být jedno, jestli zavolám souper.vratPos­ledniZpravu(), nebo bojovnik.vrat­PosledniZpravu(). V obou případech bych čekal výpis aktuální hodnoty proměnné zpráva.

 
Odpovědět
19.3.2019 11:06
Avatar
Odpovídá na Martin Konečný
Petr Štechmüller:19.3.2019 11:23

Ahoj, zpráva je instanční proměnná, to znamená, že každý nově vytvořený bojovník má vlastní proměnnou zpráva. Proto si každý může nastavovat vlastní zprávu a metoda vratPosledniZ­pravu opravdu udělá to, co se od ní očekává.

Odpovědět
19.3.2019 11:23
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Martin Konečný:19.3.2019 12:22

Super, díky moc za vysvětlení.

 
Odpovědět
19.3.2019 12:22
Avatar
Matěj Bína
Člen
Avatar
Matěj Bína:6.4.2019 19:29

Chtěl jsem trochu vylepšit hlášku o smrti bojovníka a napsal

if (zivoty < 0) {
        zivoty = 0;
        zprava += String.format("%s je mrtev.", jmeno);
}

To ale vyvolalo kaskádu chyb. Zjistil jsem, že k tomu je potřeba použít metodu concat(), kterou jsem ve svých poznámkách z tutoriálů nenašel. Pokud to chcete použít, správně (snad) to je:

if (zivoty < 0) {
        zivoty = 0;
        zprava = zprava.concat(String.format("%s je mrtev.", jmeno));
}
 
Odpovědět
6.4.2019 19:29
Avatar
Patrik Vala
Člen
Avatar
Patrik Vala:28.3.2020 21:16

Ahoj, jak je možné, že na public void utoc(Bojovnik souper) můžu zavolat Bojovnik bojovnik?

 
Odpovědět
28.3.2020 21:16
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:17.3.2021 13:05

Možná s tím nikdo neměl problémy, ale můžete se nad tím zamyslet - v poslední části tohoto článku - Zprávy
se v úvodu píše, že výpis nebude mít na starosti samotný bojovník. No a potom následuje postup, že přidáme nový atribut a metody.
Ale dovedu si představit, že by se někdo mohl zeptat kam je přidáme (do které třídy).

Ono to potom vyjde docela najevo, ale může to někoho zmást. Tak to berte jako podnět k zamyšlení, jestli to tam nezkonkretizovat.

Odpovědět
17.3.2021 13:05
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
ing. SARNOVSKÝ Petr:28.11.2021 6:06

Ahoj,
při kontrolním výpisu bojovníka

System.out.printf("Bojovník: %s\n", bojovnik); // test toString();

mi to hlásí chybu:
java: no suitable method found for println(java.lan­g.String,Arena­.Bojovnik)

Nevíte někdo proč?
Děkuji

 
Odpovědět
28.11.2021 6:06
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 69.