Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
Raiper34
Tvůrce
Avatar
Raiper34:26.7.2012 13:46

Zdar, mám menší problém, učím sa to podľa tutorov tak že si to najprv prečítam pozorne pozrem a potom to napíšem podľa seba. Bohužiaľ teraz sa mi to akosi nepodarilo, ked som mal vyber intiger tak to fungovalo, akonahle som ho zmenil na char tak nefunguje :/ preco?

tu je kod :(

Console.WriteLine("Vítajte v programe kalkulačka");
           string x = "ano";
           while (x == "ano")
           {
               Console.WriteLine("Zadaj 2 čísla a vyberte operáciu");
               float a;
               while (!float.TryParse(Console.ReadLine(), out a))
                   Console.WriteLine("Neplatné číslo!");
               float b;
               while (!float.TryParse(Console.ReadLine(), out b))
                   Console.WriteLine("Neplatné číslo");
               float c = 0;
               Console.WriteLine("1 - spočítavanie");
               Console.WriteLine("2 - odčítavanie");
               Console.WriteLine("3 násobenie");
               Console.WriteLine("4 - delenie");
               char vyber = Console.ReadKey().KeyChar;
               Console.WriteLine();
               if (vyber == 1)
               {
                   c = a + b;
               }
               if (vyber == 2)
               {
                   c = a - b;
               }
               if (vyber == 3)
               {
                   c = a * b;
               }
               if (vyber == 4)
               {
                   c = a / b;

               }
               if ((vyber < 1) || (vyber > 4))
               {
                   Console.WriteLine("Zadajte platnú operáciu");
               }
               else
               {
                   Console.WriteLine("Vysledok je: " + c);
               }
               Console.WriteLine("PRajete si pokračovať? ano/nie");
               x = Console.ReadLine();
           }
           Console.WriteLine("Ďakujem za vyskúšanie tohoto programu");
           Console.ReadKey();
Odpovědět
26.7.2012 13:46
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Raiper34
Tvůrce
Avatar
Odpovídá na Raiper34
Raiper34:26.7.2012 13:51

Aha chapem, tu to nie je int čiže if ((vyber < 1) || (vyber > 4))
{
Console.Write­Line("Zadajte platnú operáciu");

toto mi nebude fungovat

Nahoru Odpovědět
26.7.2012 13:51
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Raiper34
David Hartinger:26.7.2012 14:23

S charem se pracuje jinak, musíš ho psát do apostrofů ''. Rozsah výběru můžeš buď kontrolovat 4mi podmínkami nebo by to mělo jít např. pomocí contains na poli s prvky '1', '2', '3', '4'

Nahoru Odpovědět
26.7.2012 14:23
You are the greatest project you will ever work on.
Avatar
Raiper34
Tvůrce
Avatar
Odpovídá na David Hartinger
Raiper34:26.7.2012 14:32

No mal som iný plán ale keď si mi pripomenul Contains tak sa to zjednoduší :)

Nahoru Odpovědět
26.7.2012 14:32
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Raiper34
Tvůrce
Avatar
Raiper34:26.7.2012 17:17

Nedá sa nejako napísať keď mám 5 podmienok a keď sa nestane ani jedna zo 4 tak sa vykoná 5? Robím tento príklad cez podmienky a vedel by som to spraviť keby že tam pridám ešte jednu premenú, ktorá to bude kontorlovať..... ale nie je nejaká ľahšia možnosť, niečo ako píšem v prvom riadku tohoto komentu?

Nahoru Odpovědět
26.7.2012 17:17
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Raiper34
David Hartinger:26.7.2012 20:21

Jestli se to týká tohoto příkladu, tak na to jsem ti již přeci odpovídal.

Nahoru Odpovědět
26.7.2012 20:21
You are the greatest project you will ever work on.
Avatar
Raiper34
Tvůrce
Avatar
Odpovídá na David Hartinger
Raiper34:26.7.2012 20:47

Njn ale ten Contains mi akosi nefunguje :/

Nahoru Odpovědět
26.7.2012 20:47
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Raiper34
Tvůrce
Avatar
Odpovídá na Raiper34
Raiper34:26.7.2012 20:48

dávam contains do if

Nahoru Odpovědět
26.7.2012 20:48
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Raiper34
David Hartinger:26.7.2012 22:05
char[] moznosti = {'1', '2', '3', '4'};
if (moznosti.contains(vyber))
   ...
else
   ...

Já bych to asi řešil nullovatelným typem.

Nahoru Odpovědět
26.7.2012 22:05
You are the greatest project you will ever work on.
Avatar
Raiper34
Tvůrce
Avatar
Odpovídá na David Hartinger
Raiper34:26.7.2012 22:36

Diky ale asi som prebiehal, ten char vidím takto poprvý krát :)

Nahoru Odpovědět
26.7.2012 22:36
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Raiper34
Kit:27.7.2012 8:57

2× kontrolovat stejnou podmínku je značně nekonzistentní. Použij switch a default, případně else if.

Ještě lepší by bylo použití výjimky.

Nahoru Odpovědět
27.7.2012 8:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:27.7.2012 9:04

Však switch v článku je, koukni na poslední zdroják. Raiper chtěl použít podmínky, ty jsou tam někde v předchozím dílu, aby to bylo jednodušší.

Když na to tak koukám, úplně nejjednodušší je si udělat proměnnou a v posledním else té elseif sekvence ji nastavit na false a je to, to mě včera nenapadlo.

Výjimky jsou od tohoto dílu ještě hodně vzdálené :) Dalo by se to také dobře řešit nullovatelným typem výsledku.

Nahoru Odpovědět
27.7.2012 9:04
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:27.7.2012 9:39

Toho switche jsem si samozřejmě všiml. Právě proto mi nebylo jasné, proč tam Raiper cpe if.

Konstrukce if a switch jsou sice většinou zaměnitelné, ale Raiper spíš ukázal, jak to nedělat.

Výsledek nemusí být nastaven na null. Stačí ho nenastavit a pak jen detekovat existenci výsledku.

Nahoru Odpovědět
27.7.2012 9:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:27.7.2012 10:05

Nenastavení výsledku je spíše styl interpretovaných jazyků, v C# to nevnímám jako čisté řešení a muselo by se to dělat přes reflexi, což je overkill.

Nahoru Odpovědět
27.7.2012 10:05
You are the greatest project you will ever work on.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:27.7.2012 10:07

Možná by to kompiler ani nezkompiloval, je dost citlivý na neinicializované proměnné.

Nahoru Odpovědět
27.7.2012 10:07
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:27.7.2012 10:53

Sám bych to tak také nedělal. Jen jsem uvažoval nad tím, čím by se dalo nahradit použití výjimky. Čistě asi nijak.

Konstrukce

string pokracovat = "ano";
while (pokracovat == "ano")
...

mi také moc čistě nepřipadne, ale pokud chceš zůstat na levelu pro začátečníky, tak moc dalších možností není.

Nahoru Odpovědět
27.7.2012 10:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 16 zpráv z 16.