• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Prosta funkcja odnośnie losowania liczby zwraca wartość 'undefined'

Object Storage Arubacloud
+1 głos
118 wizyt
pytanie zadane 20 grudnia 2021 w JavaScript przez Nabuchadonozor Gaduła (3,120 p.)
zamknięte 20 grudnia 2021 przez Nabuchadonozor

Witam radośnie wszelkich forumowiczów,

otóż piszę skrypt szyfrujący, w którym potrzebuję wylosować cyfrę. Funkcja posiada dwa typy, odwołanie do pierwszego ( drawNumber(1) ) sprawia, iż funkcja powinna zwrócić losową liczbę parzystą, natomiast gdy przekażemy do funkcji parametr o wartości 2, to zwracana wartość powinna być liczbą nieparzystą. Jednakże zwraca mi ta funkcja wartość 'undefined', czy mógłby ktoś pomóc mi znaleźć wyjście z labiryntu nieprawidłowości?

 

function drawNumber(type){
    var result;

    if(type == 1){
        result =  Math.floor(Math.random() * 22);
        if(result%2 == 0){
            return result;
        } else drawNumber(1);
    } else if(type == 2){
        result =  Math.floor(Math.random() * 22);
        if(result%2 == 1){
            return result;
        } else drawNumber(2);
    }
}

 

komentarz zamknięcia: brak return'a podczas rekurencji
komentarz 20 grudnia 2021 przez Nabuchadonozor Gaduła (3,120 p.)

Dodaje, że zwracana wartość np. poprzez console.log(drawNumber(2)) nie zawsze zwraca 'undefined', czasami zwraca poprawnie.

2 odpowiedzi

+2 głosów
odpowiedź 20 grudnia 2021 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 20 grudnia 2021 przez Nabuchadonozor
 
Najlepsza

Przy

else drawNumber(1);

oraz

else drawNumber(2);

brakuje return, przez co wynik zwrócony z rekurencyjnego wywołania jest "ignorowany" i całość zwraca undefined.

komentarz 20 grudnia 2021 przez Nabuchadonozor Gaduła (3,120 p.)

Kocham Cię stary! W życiu bym na to nie wpadł, z rekurencjami bardzo rzadko miałem okazję pracować, dzięki wielkie! Miłego!

+1 głos
odpowiedź 20 grudnia 2021 przez Chess Szeryf (76,710 p.)
Zamiast var daj let.

Aha i możesz dopisać corner case, kiedy rekurencja jakimś cudem wykona się, np. ponad 100 razy. if x over 100 then result 0
komentarz 20 grudnia 2021 przez Nabuchadonozor Gaduła (3,120 p.)

Tylko, że to dalej nie naprawia błędu (mowa o zmianie z var na let). Zastanawia mnie, dlaczego mówisz "jakimś cudem"? Może w niej jest gdzieś błąd? Może dlatego niekiedy działa, bo wtedy nie potrzebuje rekurencji, a jeśli chce uzyskać parzystą, a randomowa wychodzi nieparzysta i właśnie w tym momencie korzysta rekurencji żeby jeszcze raz spróbować, może wtedy właśnie coś się psuje i wyskakuje 'undefined'..? Już dorzucam tego corner case'a, chociaż nie wiem do końca po co, bo chcę, żeby ona się wykonywała tak długo, aż uzyska poprawny wynik...

1
komentarz 20 grudnia 2021 przez Chess Szeryf (76,710 p.)
W sumie tak, funkcja random nie powinna milion razy losować nieparzystych. Wspomniałem dla czujności.

Podobne pytania

+1 głos
1 odpowiedź 348 wizyt
0 głosów
1 odpowiedź 77 wizyt
pytanie zadane 27 marca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
0 głosów
0 odpowiedzi 667 wizyt
pytanie zadane 12 marca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

92,549 zapytań

141,392 odpowiedzi

319,519 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...