IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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
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 Hartinger
Vlastník
Avatar
Odpovídá na Preedy
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
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 Hartinger
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 Hartinger
Vlastník
Avatar
Odpovídá na Preedy
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Preedy
Člen
Avatar
Odpovídá na David Hartinger
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
Tvůrce
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
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na Preedy
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
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
Tvůrce
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
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger: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
New kid back on the block with a R.I.P
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.