Diskuze: C# cesty kódu

C# .NET .NET (C# a Visual Basic) C# cesty kódu American English version English version

Avatar
danik.devbook:

Zdravím, mám problém s tímto: Píše ne všechny cesty kódu vrací hodnotu. Já už ale jinou cestu nevidím.

public string Odpoved(string str)
        {
                foreach (string p in slova.pozdravy)
                {
                    if (str.ToLower().Contains(p))
                    {
                        return "Zdravím";
                    }
                    else
                    {
                        return "Nerozumím";
                    }
                }
        }
 
Odpovědět 15.9.2015 23:04
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:

Když ve slova.pozdravy nebude nic, tak ti to do toho foreache ani neskočí a žádný return nebude "po cestě".

 
Nahoru Odpovědět  +2 16.9.2015 6:20
Avatar
danik.devbook:

Milan Křepelka
A kde a jak mám ten return napsat? Mám tam dat nějakou podmínku?

 
Nahoru Odpovědět 16.9.2015 7:19
Avatar
Odpovídá na danik.devbook
Martin Turner:

Ahoj,
popravdě programovat v C# se teprve učím, ale myslím, že problém může být v tom, že cyklus můžeš teoreticky opustit dříve než doleze k return (např. při použití break před if podmínkou), pak metoda nic nevrací.
Return "Nerozumím"; bych tedy vložil až za cyklus foreach.
Prosím ostatní o případnou korekci nebo doplnění.
Díky.

 
Nahoru Odpovědět  +1 16.9.2015 7:27
Avatar
Martin Turner:

Koukám, že má reakce byla trochu zdlouhavá a že diskuze už začala. :-)

 
Nahoru Odpovědět 16.9.2015 7:30
Avatar
Odpovídá na danik.devbook
Michal Štěpánek:

Musíš mít return tam, kde ten program bude procházet za všech okolností. Např.

public string Odpoved(string str)
        {
                string odpoved = "NIC";
                foreach (string p in slova.pozdravy)
                {
                    if (str.ToLower().Contains(p))
                    {
                        odpoved = "Zdravim";
                    }
                    else
                    {
                        odpoved = "Nerozumím";
                    }
                }
            return odpoved;
        }
Nahoru Odpovědět 16.9.2015 7:58
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na danik.devbook
Libor Šimo (libcosenior):

Return by mohol byť takto:

public string Odpoved(string str)
        {
                string vystup = "";
                foreach (string p in slova.pozdravy)
                {
                    if (str.ToLower().Contains(p))
                    {
                        vystup = "Zdravím";
                    }
                    else
                    {
                        vystup = "Nerozumím";
                    }
                }
                return vystup;
        }

ale to asi nerieši tvoj problém.
Cyklus asi berie viacej vstupov (neviem koľko ich máš v kolekcii slova.pozdravy) a ty potrebuješ iba jeden výstup typu string. Iné by bolo, keby si vracal pole stringov.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 16.9.2015 7:59
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Nahoru Odpovědět 16.9.2015 8:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
danik.devbook:

Dík všem

 
Nahoru Odpovědět 16.9.2015 9:44
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 9 zpráv z 9.