Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Preedy
Člen
Avatar
Preedy:16.6.2012 10:19

Ahoj, v programu se mi vyskytla menší chyba(kód) a nebím co s tím. Myslel jsem si že to takhle má fungovat, ale omyl. Mám tam string a ten chci dát do stringu.

string[] pole = new string[8];//pole se zadaným číslem a paritními bity
           int dekaCislo;
           string hexaCislo;
           string binCislo;
           Console.Write("Zadej číslo v hexa soustavě: ");
           hexaCislo = Console.ReadLine();
           try
           {
               binCislo = Convert.ToString(Convert.ToInt32(hexaCislo, 16), 2);
               dekaCislo = Convert.ToInt32(hexaCislo, 16);
               if (dekaCislo > 4096)
               {
                   Console.WriteLine("chyba");
               }
               else
               {
                   Console.WriteLine(binCislo);
                   binCislo[0] = pole[0];// nejde proč?
               }
           }
           catch
           {
               Console.WriteLine("chyba");
           }
 
Odpovědět 16.6.2012 10:19
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Preedy
David Čápka:16.6.2012 10:28

Protože binCislo je string a pole je pole stringů. Ty děláš toto:

"Ahoj"[0] = {"Ahoj", "jak", "je?"}[0];
Nahoru Odpovědět 16.6.2012 10:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Kit:16.6.2012 10:32

C# sice neznám, ale vidím, že se snažíš string ukládat do znaku.

Nahoru Odpovědět 16.6.2012 10:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Preedy
Člen
Avatar
Odpovídá na David Čápka
Preedy:16.6.2012 11:33

takže musim rozdělit ten string na chary a ty chary hodit do pole?

 
Nahoru Odpovědět 16.6.2012 11:33
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Preedy
David Čápka:16.6.2012 11:38

V C# se nedají jednoduše měnit chary ve stringu, jsou read-only. Existuje však metoda ToCharArray na stringu.

binCislo si dokáži dle názvu představit, ale nevím, co je v pole, takže se špatně radí. Do celého programu pronikat nechci.

Nahoru Odpovědět 16.6.2012 11:38
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Preedy
Člen
Avatar
Odpovídá na David Čápka
Preedy:16.6.2012 11:50

jj, dík moc. Pronikání do kódu chápu, nehci celý program

 
Nahoru Odpovědět 16.6.2012 11:50
Avatar
Kit
Redaktor
Avatar
Kit:16.6.2012 11:52

Proč máš vlastně v bloku try příkaz Console.Write­Line("chyba"); když to patří do bloku catch? Proč v bloku catch nemáš ošetření chyby, ale jen zobrazení chybové hlášky?

Nahoru Odpovědět 16.6.2012 11:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Preedy
Člen
Avatar
Odpovídá na Kit
Preedy:16.6.2012 12:07

jednoduše, pořádně nevím jak try funguje

 
Nahoru Odpovědět 16.6.2012 12:07
Avatar
Kit
Redaktor
Avatar
Odpovídá na Preedy
Kit:16.6.2012 12:18

Do bloku try vložíš příkazy, ve kterých může dojít k chybě. Systémové či uživatelské. Pokud dojde k uživatelské chybě, vyvoláš ji ručně příkazem throw. Nepotřebuješ pak blok else, protože v případě výjimky se zbytek bloku try neprovede.

V bloku catch uděláš všechny operace, které se mají v případě výjimky provést. Vypsání uživateli nebo zápis do logu, ale hlavně napravení chyby nebo její vypropagování do vyšších vrstev.

Blok catch má v C# určitě nějaké parametry.

Nahoru Odpovědět 16.6.2012 12:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Preedy
David Čápka:16.6.2012 12:53

Máš štěstí, zrovna na to dopisuji tutoriál, za chvíli tu bude ;)

Nahoru Odpovědět 16.6.2012 12:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:16.6.2012 17:18

Nechápu proč nepoužil to tryparse,...

 if (int.TryParse(nějaký string, out nějké int))
//Povedlo se - příkazy pro zdar,...
 
Nahoru Odpovědět 16.6.2012 17:18
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:16.6.2012 18:12

int.TryParse() je jen berlička pro ty, kteří nechtějí používat výjimky. Pokud vím, tato metoda neumí pracovat s čísly v šestnáctkové soustavě.

Nahoru Odpovědět 16.6.2012 18:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:16.6.2012 18:40

Mě zase přijde zbytečné všude cpát try bloky,...

 
Nahoru Odpovědět 16.6.2012 18:40
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:16.6.2012 18:43

Používání TryParse je určitě v pořádku, ale stejně tak není nic špatného na použití prostého try-catch. V try-catch je výhoda, že tam mohu nacpat parsování všech hodnot objektu a nemusím to ošetřovat po jedné. Naopak když potřebuji ošetřit 1 vstup, použiji TryParse. Je to jedno.

Nahoru Odpovědět 16.6.2012 18:43
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:16.6.2012 19:59

Bloků try není potřeba mnoho. V interních metodách je nepoužívám skoro vůbec. Raději nechám výjimku vybublat i mimo objekt. Často až do hlavního modulu, kde centrálně ošetřím vše, co se mezitím nezachytilo. U jednoduchých aplikací mám jen ten jeden.

O to víc práce si dám s parametry throw, aby obsahovaly dostatek údajů o vzniklé chybě. A také s blokem catch, který výjimky nesmí polykat, ale řešit.

Nahoru Odpovědět 16.6.2012 19:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:16.6.2012 20:18

Co myslíš tím řešit? Když se něco nepovede, tak na to uživatele upozorním a skončím. Když mi dá nesmyslné parametry z konzole nebo neexistující soubor, těžko to budu řešit jinak. Můžeš prosím uvést nějaký příklad?

Nahoru Odpovědět 16.6.2012 20:18
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:16.6.2012 21:03

Když se uživatel pokusí dělit nulou, tak přece neshodím celou kalkulačku, ale zobrazím nějakou reakci a pokračuji dál v aplikaci.

Když se mi nepodaří otevřít databázi, tak chybu zaloguji a poskytnu návštěvníkovi provizorní stránku.

Když z databáze nedostanu hledaný článek, do proměnných vložím náhradní obsah typu "článek nenalezen", přidám k tomu HTTP status 404, ale stránku přes šablonu normálně zobrazím.

Nahoru Odpovědět 16.6.2012 21:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:16.6.2012 21:09

Jinými slovy vždy jen zobrazuješ chybovou hlášku a skončíš.

Nahoru Odpovědět 16.6.2012 21:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:16.6.2012 21:26

V PHP na webu se vždy jen něco zobrazí a pak skript skončí, tak to nepřekrucuj.

Když budu třeba parsovat vstupní CSV a některý ze záznamů bude mít chybné pole, tak příslušný warning vypíši nebo zaloguji a jedu na další záznamy.

Nahoru Odpovědět 16.6.2012 21:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:16.6.2012 21:43

Tak web je velmi specifický díky klient-server architektuře. Nicméně chybová stránka 404 se dá chápat stejně, jako MessageBox v C#.

To CSV je dobrý příklad.

Nahoru Odpovědět 16.6.2012 21:43
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 20 zpráv z 20.