Diskuze: String nejde uložit do stringového pole

C# .NET .NET (C# a Visual Basic) String nejde uložit do stringového pole American English version English version

Avatar
Preedy
Člen
Avatar
Preedy:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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.