• Zadání: Zkuste v hlavní statické metodě Main v programu KalkulackaVicenasobneVetveni_Main implementovat pomocí příkazů try, catch ošetření různých typů výjimek. Aplikujte ošetření try na potřebný zdrojový kód. Dané výjimky otestujte. Jedná se o následující typy výjimek:
    • DivideByZeroException - dělení nulou
    • FormatException - chyba při konverzi
    • Exception - obecná výjimka
  • Řešení:
    • Hlavní program -  Main:
static void Main(string[] args)
{
    /*Deklarace proměnných: 'kod' ... celočíselný kód aritmetické operace, 
     * 'a' ... první zadané číslo, 'b' ... druhé zadané číslo; 
     * 'c' ... výsledek aritmetické operace*/
    int kod;
    double a, b, c;
    //Výpis výzvy k zadání operace
    Console.Write("Zadejte kód operace (1 ... sčítání, 2 ... odečítání, " +
        "3 ... násobení, 4 ... dělení): ");
    //Potenciálně nebezpečný kód
    try
    {
        //Načtení kódu operace
        kod = int.Parse(Console.ReadLine());
        //Výpis výzvy k zadání prvního čísla
        Console.Write("Zadejte A: ");
        //Načtení prvního zadaného čísla
        a = double.Parse(Console.ReadLine());
        //Výpis výzvy k zadání druhého čísla
        Console.Write("Zadejte B: ");
        //Načtení druhého zadaného čísla
        b = double.Parse(Console.ReadLine());
        //Přepnutí do příslušné sekce podle hodnoty 'kod'
        switch (kod)
        {
            //Operace sečtení
            case 1:
                //Sečtení dvou zadaných čísel
                c = a + b;
                //Ukonnčení sekce pro kod == 1
                break;
            //Operace odečtení
            case 2:
                //Odečtení dvou zadaných čísel
                c = a - b;
                break;
            //Operace násobení
            case 3:
                //Násobení dvou zadaných čísel
                c = a * b;
                break;
            //Operace dělení
            case 4:
                //Podíl dvou zadaných čísel
                c = a / b;
                break;
            //Zadání špatného číselného kódu operace
            default:
                //Výpis chyby v zadávání kódu
                Console.WriteLine("Zadali jste špatný číselný kód!");
                //Zamezení provádění dalších příkazů - opuštění metody
                return;
        }
        //Výpis textu s hodnotou výsledku
        Console.WriteLine("Výsledek C: {0}", c);
    }
    //Handler pro dělení nulou bez parametru handleru
    catch (DivideByZeroException)
    {
        //Výpis chyby
        Console.WriteLine("B nesmí být 0");
        //Zamezení provádění dalších příkazů - opuštění metody
        return;
    }
    //Handler chyby při konverzi s parametrem handleru
    catch (FormatException exFormat)
    {
        //Výpis parametru handleru
        Console.WriteLine("Chyba při konverzi: {0}", exFormat.ToString());
    }
    //Obecná výjimka typu Exception (stačilo by pouze catch) – používat obezřetně
    catch (Exception ex)
    {
        Console.WriteLine("Nastala jiná výjimka: {0}", ex.ToString());
    }
 
    //Čekání na stisk klávesy -> Ukončení programu
    Console.ReadKey();
}

  • Výstup programu 1: Ukázka výsledku podílu
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 5
Zadejte B: 2
Výsledek C: 2,5

  • Výstup programu 2: Ukázka výsledku při chybné konverzi včetně popisu chyby
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: bflm
Chyba při konverzi: System.FormatException: Vstupní řetězec nemá správný formát.
   v System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   v System.Double.Parse(String s)
   v KalkulackaTypyVyjimek.Program.Main(String[] args) v C:\Users\...\Programy\Kalkulacka_nove\KalkulackaTypyVyjimek\KalkulackaTypyVyjimek\KalkulackaTypyVyjimek\Program.cs:řádek 29
  • Výstup programu 3: Ukázka výsledku nekonečno

Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 5
Zadejte B: 0
Výsledek C: ?
  • Výstup programu 4: Ukázka výsledku Not a Number

Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 0
Zadejte B: 0
Výsledek C: NaN
  • Výstup programu 5: Výjimka typu DivideByZeroException

Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 5
Zadejte B: 0
B nesmí být 0

Última modificación: domingo, 2 de febrero de 2020, 17:02