csharp.aspone.cz csharp.aspone.cz

Příkaz switch

Příkaz if se hodí pro rozhodování mezi dvěmi možnostmi. Potřebujeme-li však větší počet možností, tak je vhodnou možností použítí příkazu switch. Příkaz switch začínám klíčovým slovem switch a hned poté za ním následují kulaté závorky. Výraz musí být celočíselný, char nebo string. Pak následuje tělo příkazu switch, uzavřené ve složených závorkách. Dále je tu klíčové slovo case a default.

 
 switch (výraz)
 {
   case konstanta: příkazy;
        break;
   case konstanta: příkazy;
        break;
   default: příkazy;
        break;
 }
 

Tělo příkazu switch se skládá ze sekcí (alternativ). To jsou skupiny příkazů, před nimiž jsou napsaná návěští ve tvaru case konstanta:. Před jednou sekcí může být i více návěští. Jedna ze sekcí můžu mít návěstí default - tj. když se netrefíme ani do jednoho předefinovaného návěští, tedy vše ostatní, když nic netrefím. Když zde nebude default, příkaz switch se vůbec neprovede, pokud se neprovede ani jedno návěští. V jednom návěští case se smí uvést jen jedna konstanta. Žádná konstanta v návěštích v jednom příkazu switch se nesmí opakovat.

Při zpracování příkazu switch se nejprve vyhodnotí výraz. Pak se vyhledá návěští case, v nemž je uvedena konstanta se stejnou hodnotou, jako má výraz, a program přejde na první příkaz sekce, která za ním následuje. Každá ze sekcí musí být ukončena příkazem, který jednoznačně určí, jak má program pokračovat. Zpravidla je to příkaz break, který přikazuje opustit tělo příkazu switch a přejít na příkaz za ním, může to však být i příkaz return nebo goto.

Použití switche (přepínače)

Nejprve se koukněme na metodu Main, z ní volám další dvě metody ze tříd tridaZadaHodnotu a vyhodnotiZadani. Trida tridaZadaHodnout jen vypíše řetězec. Třída vyhodnotiZadani zavolá metodu volamKlavesnicku ze třídy volamKlavesnici, zde se načte hodnota vstupu a převede se na typ int. S hodnotou int pak pracuji ve switchi, kde hodnotu inicializuju do proměné promenna a tu dám jako vstupní parametr přepínači.

using System;

class tridaZadaHodnotu
{
    public void zadejHodnotu()
    {
        Console.WriteLine("Jakou značku auta by jste si koupili?" +
        "\nZadejte prosím číselnou hodnotu uvedenou zde u vozidla\nAudi    = 0\nPeugeot = 1\n"
        + "Renault = 2\nPopřípadě jinou hodnotu, pokud jste si nevybrali.\n\n");
    }
}

class vyhodnotiZadani
{
    public void vyhodnoti()
    {
        int promenna = int.Parse(Console.ReadLine());

        switch (promenna)
        {
            case 0: Console.WriteLine("Zadali jste Audi, dobrá volba!");
                break;
            case 1: Console.WriteLine("Zadali jste Peugeota, nic moc!");
                break;
            case 2: Console.WriteLine("Zadali jste Renaulta (kdo nezná, udělal špatně");
                break;

            default: Console.WriteLine("Nezadali jste nic, asi se Vám nelíbí");
                break;
        }
    }
}

class zdeBudeMain
{
    static void Main()
    {
        tridaZadaHodnotu zadani = new tridaZadaHodnotu();
        zadani.zadejHodnotu();

        vyhodnotiZadani vyhodnocovac = new vyhodnotiZadani();
        vyhodnocovac.vyhodnoti();
    }
}

Příkaz switch pro určení odpovědi

Zde jsem použil vstup a reakci uživatele, který zadal do konzole na otázku odpověď A pro Ano a N pro N. Takže se načte řetězec, převede se na typ char, pak v metodě main jsme ho inicializovali do proměnné AnoNe a pak vyhodnotili v příkazu switch a přidělilo se odpovídající návěští. Zde jsem ke každé odpovědi přidělil 2 návěští, aby uživatel mohl zadat jak malý, tak velký znak.

using System;

class pouzitiSwitche
{
    static void Main()
    {
        Console.WriteLine("Máte rádi seriál Simpsonovi? Zadejte A/N.");

        char AnoNe = char.Parse(Console.ReadLine());

        switch (AnoNe)
        {
            case 'a':
            case 'A': { Console.WriteLine("Jste můj člověk Simpsonovi jsou dobrý seriál."); }
                break;
            case 'n':
            case 'N': { Console.WriteLine("No comment, no prostě Vám asi nevyhovoují."); }
                break;
            default:
                {
                    Console.WriteLine("Asi jste se netrefili do písmenek, zazdejte: "
            + "A pro ano či N pro ne!\n");
                }
                break;
        }

        Console.WriteLine("Děkuji za anketu");
    }
}