Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Ghst
Člen
Avatar
Ghst:17.10.2014 12:51

Ahoj,
snažím se napsat výše zmiňovanou funkci, ale překladač mi pořád hází chybu "not all code path return value"

        private Uzel DepthSearch(Uzel poc)
        {
            if (poc.testKonce())
            {
                //nalezeno
                return poc;
            }
            else
            {
                if (poc.naslednici != null)
                {
                    foreach (Uzel u in poc.naslednici)
                    {
                       DepthSearch(u);
                    }
                }
            }
            return null;
// přidáním tohoto returnu uspokojím překladač, ale kó už vrací nesmysl
        }
 
Odpovědět
17.10.2014 12:51
Avatar
Lukáš Křehula:17.10.2014 13:04

Vůbec nerozumím, co ten tvůj kód má dělat, ale můžeš to zkusit takto:

private Uzel DepthSearch(Uzel poc)
 {
     if (poc.testKonce())
     {
         //nalezeno
         return poc;
     }
     else
     {
         if (poc.naslednici != null)
         {
             foreach (Uzel u in poc.naslednici)
             {
                return DepthSearch(u);
             }
         }
     }

 }
 
Nahoru Odpovědět
17.10.2014 13:04
Avatar
sadlomaslox25:17.10.2014 13:08

spis

private Uzel DepthSearch(Uzel poc)
  {
      if (poc.testKonce())
      {
          //nalezeno
          return poc;
      }
      else
      {
          if (poc.naslednici != null)
          {
              foreach (Uzel u in poc.naslednici)
              {
                 return DepthSearch(u);
              }
          }
          else
              return null;
      }

  }
 
Nahoru Odpovědět
17.10.2014 13:08
Avatar
Ghst
Člen
Avatar
Ghst:17.10.2014 13:55

Snažím se implementovat hledání do hloubky (vrátím první uzel, který splňuje podmínku).
Tyto možnosti a mnoho dalších sem zkoušel a nic, ale také si myslím, že by to mělo být takto: tento zápis se ale nelíbí překladači a hlásí uváděnou chybu.

//hledaní do hloubky
private Uzel DepthSearch(Uzel poc)
 {
     if (poc.testKonce())
     {
         //nalezeno řešení
         return poc;
     }
     else
     {
         if (poc.naslednici != null)
         {
             foreach (Uzel u in poc.naslednici)
             {
               return DepthSearch(u);
             }
         } else return null;
     }
// přidáním returnu uspokojím překladač, v jiném místě pořád hlásí "not all code path return value"
 }
 
Nahoru Odpovědět
17.10.2014 13:55
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Ghst
tomisoka:17.10.2014 14:07

Pokud jsem dobře pochopil tak by mělo fungovat tohle:

private Uzel DepthSearch(Uzel poc){
  if (poc.testKonce())
    return poc;
  if(poc.naslednici!=null){
    foreach(Uzel u in poc.naslednici){
      Uzel mem;
      if((mem=DepthSearch(u))!=null)return mem;
    }
  }
  return null;
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
17.10.2014 14:07
Avatar
Ghst
Člen
Avatar
Odpovídá na tomisoka
Ghst:17.10.2014 14:30

Díky, přesně tohle bylo to co mi uniklo ;)

 
Nahoru Odpovědět
17.10.2014 14:30
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Ghst
Petr Nymsa:17.10.2014 17:37

Hlavně ti uniklo vůbec fungování metod a návratových hodnot, tím bych začal ;)

Nahoru Odpovědět
17.10.2014 17:37
Pokrok nezastavíš, neusni a jdi s ním vpřed
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 7 zpráv z 7.