NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
danik.devbook:15.9.2015 23:04

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
Tvůrce
Avatar
Milan Křepelka:16.9.2015 6:20

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

 
Nahoru Odpovědět
16.9.2015 6:20
Avatar
danik.devbook:16.9.2015 7:19

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:16.9.2015 7:27

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
16.9.2015 7:27
Avatar
Martin Turner:16.9.2015 7:30

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:16.9.2015 7:58

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):16.9.2015 7:59

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í
+2,50 Kč
Ř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
Odpovídá na Michal Štěpánek
Libor Šimo (libcosenior):16.9.2015 8:01

Bol si o sekundu rýchlejší. :-D

Nahoru Odpovědět
16.9.2015 8:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
danik.devbook:16.9.2015 9:44

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.