Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 4. diel - Hracia kocka v C# - Zapuzdrenie a konštruktor

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Petr Čech
Tvůrce
Avatar
Odpovedá na Jan Vargovský
Petr Čech:14.2.2016 14:25

Random bere jako seed čas, takže když několikrát za sebou třeba v cyklu zavoláš

new Random().Next();

vyjde ti vždy stejné číslo.
Však si to zkus...

Odpovedať
the cake is a lie
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Petr Čech
Jan Vargovský:14.2.2016 15:46
foreach (var item in Enumerable.Range(0, 10))
{
    Console.WriteLine(new Random().Next());
    Thread.Sleep(100);
}

Tvoje požadavky to splňuje a přesto to dává jiné čísla :/

Avatar
Odpovedá na Petr Čech
Richard Brzokoupil:14.2.2016 15:47

nejsem si jistej jestli jsi jsem se vyjádřil správně, já nechápu proč v této části kódu :

public Kostka()
{
        pocetSten = 6;
        random = new Random();
}

musí být "random = new Random();", přece s ní nijak nepracuji, tak k čemu tam je?
Druhá otázka: kdyby v konstruktoru chyběl "random = new Random();" byla by funkčnost stejná ? a jestli ne tak proč ?
děkuji za osvětlení :)

Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Richard Brzokoupil
Jan Vargovský:14.2.2016 15:51

Je to prostě proměnná třídy, která je využívána skrz tu celou instanci. Je zbytečné jí vytvářet pro každé další číslo té sekvence znova. Navíc by ti nastala ta situace, že když to generuješ často po sobě, tak chytneš ten samý seed a vezmeš si z toho jen první prvek a pak takle dokola, dokud se nezmění ten seed toho randomu (v této implementaci jen dokud se nezmění čas).

Avatar
Petr Čech
Tvůrce
Avatar
Odpovedá na Richard Brzokoupil
Petr Čech:14.2.2016 16:21

Tak si to zkus. Dostaneš NullReference­Exception. Jde o to, že Random není to samé jako random. Random je třída kdežto random je proměnná. Když ji neinicializuješ, tj "random = new Random();" bude mít výchozí hodnotu null. Pokud ti to není jasné ani teď, projdi si prostě další návody, časem ti to dojde ;-)

Odpovedať
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Odpovedá na Jan Vargovský
Petr Čech:14.2.2016 16:22

Protože tam je Thread.Sleep(); s tím jsem samozřejmě nepočítal. Když to dáš pryč, vyjdou stejná čísla.

Odpovedať
the cake is a lie
Avatar
Odpovedá na Petr Čech
Richard Brzokoupil:14.2.2016 16:41

Dobře bobře tak díky :)

Avatar
Honza.G
Člen
Avatar
Honza.G:17.5.2016 11:49

Zdravím, chci se zeptat, mohl by mi někdo popsat tento kus kodu podrobně prosím?

public override string ToString()
{
        return String.Format("Kostka s {0} stěnami", pocetSten);
}

Předem dík :)

Avatar
Odpovedá na Honza.G
Štěpán Wünsch:17.5.2016 13:17

Čemu přesně nerozumíš? Myslím že je to tu popsáno dost podrobně.

Každý objekt má metodu ToString(), která vrací textovou reprezentaci. Když napíšeš

Kostka kostka = new Kostka();
Console.WriteLine(kostka);

Výstup bude: NazevProjektu­.Kostka

Console.WriteLine(kostka);

se automaticky převede na

Console.WriteLine(kostka.ToString());

Většinou chceš, aby se vypsalo něco přirozenějšího.

public override string ToString()
{
        return String.Format("Kostka s {0} stěnami", pocetSten);
}

Tento kód znamená, že přepíšeš (klíčové slovo override) onu výchozí metodu svou vlastní. V metodě vrátíš string (text, který chceš aby se zobrazil).

return String.Format("Kostka s {0} stěnami", pocetSten);

je to samé jako

return "Kostka s " + pocetSten + " stěnami";

je to samé jako

return "Kostka s " + pocetSten.ToString() + " stěnami";

Nicméně String.Format (= string.Format) je přehlednější. Hlavně, pokud vypisuješ více hodnot.

Avatar
Odpovedá na Honza.G
Michal Štěpánek:17.5.2016 13:42

A v poslední verzi C# můžeš napsat

public override string ToString()
{
        return String.Format($"Kostka s {pocetSten} stěnami");
}

a vypíše to to samé...

Odpovedať
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 159.