NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 7 - 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
Petr Vít
Člen
Avatar
Odpovídá na Petr Vít
Petr Vít:31.1.2017 6:42

A take jsem se chtel jeste zeptat na toto:

public void utoc(Bojovnik souper)
        {
                int uder = utok + kostka.hod();
                souper.branSe(uder);

Metoda je public ale predavame ji argumenty. "Bojovnik souper".
To jsem jako vytvorili instanci souper v tride bojovnika ?
Diky

 
Odpovědět
31.1.2017 6:42
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Craftmanek
vajkuba1234:31.1.2017 11:40

Je treba ji volat v main metode. Ukaz jeji vypis pripadne...

Odpovědět
31.1.2017 11:40
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Vít
vajkuba1234:31.1.2017 11:45

K prvnimu prispevku: zde se jedna o tzv. pretypovani. Navic to tam uvedeno je. :)
Viz

Matematicky platí, že pocet = (zivot / maxZivot) * celkem;. My ještě doplníme zaokrouhlení na celé dílky a také přetypování jednoho z operandů na double, aby Java chápala dělení jako neceločíselné.

K druhe prispevku: nevytvoril jsi instanci, pouze jsi urcil, ze metoda bude prebirat argument typu Bojovnik, diky cemuz s nim muzes pracovat uvnitr one metody.

Odpovědět
31.1.2017 11:45
No hope, no future, JUST WAR!
Avatar
Odpovídá na Petr Vít
Petr Štechmüller:31.1.2017 11:46

Ahoj,

double pocet = Math.round(((double)zivot/maxZivot)*celkem);

kdyby tam nebylo to přetypování, tak vlastně dělíš dva celočíselné typy a výsledek takového dělení je opět celočíselný. Pokud alespoň jedno číslo (dělenec, nebo dělitel) explicitně přetypuješ na double, tak výsledek bude právě také double.

Odpovědět
31.1.2017 11:46
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Craftmanek
Peter Gasparik:15.3.2017 11:41

v konstruktore to mas zle definovane, ma to byt takto: this.maxZivot = zivot ;

Editováno 15.3.2017 11:43
Odpovědět
15.3.2017 11:41
while (noSuccess) { tryAgain(); if (Dead) break;
Avatar
Adam Bucher
Člen
Avatar
Adam Bucher:22.5.2017 12:31

V předposledním kódu je dvakrát chyba - pro vypsání hodnoty v int proměnné je použito %s:

public void utoc(Bojovnik souper) {
        int uder = utok + kostka.hod();
        nastavZpravu(String.format("%s útočí s úderem za %s hp", jmeno, uder)); // int vypsaný pomocí %s
        souper.branSe(uder);
}

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); // int vypsaný pomocí %s
                if (zivot <= 0) {
                        zivot = 0;
                        zprava += " a zemřel";
                }

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

Chytrá Java to sice spoklne, ale podle mě to není vhodné.
Pokud to má nějaký účel, prosím o vysvětlení.

 
Odpovědět
22.5.2017 12:31
Avatar
Dušan Kolesár:12.10.2017 18:38

Ahoj
Chcel by som sa opytat. Domnievam sa spravne, ze utoci sam na seba?
dakujem

 
Odpovědět
12.10.2017 18:38
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Dušan Kolesár
pocitac770:14.10.2017 23:08

Ve druhém spustitelném kódu ano, ve třetím již ne, tam jsme si vytvořilo 2 instance, kde vždy dáváme tu druhou jako parametr pro útočení

 
Odpovědět
14.10.2017 23:08
Avatar
Dušan Kolesár:19.10.2017 15:22

Ahoj, este jednu otazku by som mal.
V metode: public void utoc(Bojovnik souper) volam metodu souper.branSe(uder)
Ako parameter metody utoc beriem instanciu bojovnik a nie souper. Pravdepodobne to je jedno, ale nemalo by to byt nasledovne?

public void utoc(Bojovnik bojovnik) {
int uder = utok + kostka.hod();
nastavZpravu(Strin­g.format("%s útočí s úderem za %s hp", jmeno, uder));
bojovnik.bran­Se(uder);

Dakujem pekne

 
Odpovědět
19.10.2017 15:22
Avatar
Marek Zelený
Tvůrce
Avatar
Odpovídá na Dušan Kolesár
Marek Zelený:22.10.2017 19:01

Ahoj, když vytváříš metodu s nějakými parametry, napíšeš do závorky vždy datový typ parametru (v našem případě Bojovnik) a jeho jméno. Na jménu vlastně vůbec nezáleží, může být jakékoliv, třeba jenom "x". V podstatě se vytvoří jen nová reference, která ukazuje na ten samý objekt, který metodě předáme v parametru.

public void utoc(Bojovnik x) {
        int uder = utok + kostka.hod();
        x.branSe(uder);
}

Když potom v hlavní části programu (main) vytvoříme instanci třídy Bojovnik, která se jmenuje třeba "klaun" a zaútočíme na ni, budou v paměti uložené dvě reference na ten samý objekt. Jedna bude proměnná "klaun", druhá se bude jmenovat "x" (jak jsme ji nazvali v metodě nahoře), obě ale budou ukazovat na bojovníka jménem Shadow se 60 životy.

Bojovnik bojovnik = new Bojovnik("Zalgoren", 100, 20, 10, kostka);
Bojovnik klaun= new Bojovnik("Shadow", 60, 18, 15, kostka);
bojovnik.utoc(klaun);

Proměnné si zkrátka můžeš pojmenovat úplně jak chceš, jen si musíš dávat pozor, aby ses v kódu vyznal a věděl, co je pod kterým jménem uložené :-).

 
Odpovědět
22.10.2017 19:01
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 71.