Citat:
Ursprungligen postat av
bigkjell85
Jag hänger inte riktigt med på vad det översta if-blocket fyller för funktion, speciellt vad detta är :
value = NaN; ?
Jag har även svårt att tolka :
Kod:
if len>longest
longest = len;
start_index = i - len + 1; % <=
value = x(i); % <=
end
Det första blocket är en "idiot"-check som ser till att om du ger funktionen input med något den inte är tänkt för att hantera så kraschar den inte eller skapar andra problem. Det är fullt möjligt att mata in en tom vektor till den. Koden x=[]; ger dig en tom vektor, dvs en som saknar värden och matar du in det i funktionen så händer det saker man inte vill utan ett test om input är ok.
Det är inget man tänker på i början när man lär sig koda, men det är väldigt bra att ha med den typen av tester i kod eftersom användare generellt kommer att göra konstiga saker som att mata in en textsträng till funktioner som skall ha tal som input, negativa tal till en funktion som bara tar positiva tal eller nåt annat som inte är tänkt att göras.
NaN är en vanlig förkortning för "Not a Number" och påvisar att det sökta värdet saknas.
start_index = i - len + 1; ger dig startindex för sekvensen som är longest i vektorn du matat in. i är aktuellt index för hur långt funktionen hunnit i undersökningen av värden i din vektor och att len+1 används är för att när sekvensen slutar så måste du räkna bakåt hur lång den var för att komma till där den började. Om du siffersekvensens längd (len) steg tillbaka så hamnar du på indexet före start, där du har en annan siffra. Därför len+1 och inte bara len.
value = x(i); ger dig vilket värde som ligger i position i i vektorn x. Det sparar vilken siffra som sekvensen longest består av eftersom alla siffror i sekvensen är lika.