Avatar
Ghst
Člen
Avatar
Ghst:

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
Redaktor
Avatar
Lukáš Křehula:

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:

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:

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
Redaktor
Avatar
Odpovídá na Ghst
tomisoka:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 17.10.2014 14:07
Avatar
Ghst
Člen
Avatar
Odpovídá na tomisoka
Ghst:

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

 
Nahoru Odpovědět 17.10.2014 14:30
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Ghst
Petr Nymsa:

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

Nahoru Odpovědět  -1 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.