2015-11-11 12 views
6

Mam otrzymać numer, który jest podzielny przez dwóch i robię to. Nie wiem, dlaczego mój kod nie działa. Robię to w trakcie nauki javascript. Pojawia się błąd:jeśli instrukcja nie zwróci wartości true

Ups, spróbuj ponownie. Wygląda na to, że twoja funkcja zwraca wartość false, gdy number = 2. Sprawdź, czy twój kod w instrukcji if/else poprawnie zwraca wartość true, jeśli otrzymany numer jest równy.

Kwestia jest taka:

zapis if/else wewnątrz funkcji ISEVEN. Należy zwrócić wartość true; jeśli liczba, którą otrzymuje, jest równomiernie podzielna przez 2. W przeciwnym razie (w przeciwnym razie) powinna zwrócić wartość false ;. Pamiętaj, aby powrócić - nie używaj console.log()!

Mój kod

var isEven = function(number) { 
// Your code goes here! 
    if(4 % 2) { 
     return true; 
    } else { 
     return false; 
    } 
}; 

Co robię źle?

+4

'4' powinno być' liczba' –

+0

Więc gdzie powinienem zdefiniować numer? – Becky

+0

'liczba' jest formalnym parametrem dla twojej funkcji – Pointy

Odpowiedz

3

innych odpowiedzi są poprawne w momencie wpisuję to jednak wyjaśnić

var isEven = function(number) { 
// Your code goes here! 
    if(4 % 2) { 
     return true; 
    } else { 
     return false; 
    } 
}; 

% Jest to operator podział moduł. Więc zwraca wartość. Modulus informuje o pozostałej części po dzieleniu. Tak więc 4 moduł 2 zwraca 0, ponieważ nic nie zostało. Stąd dlaczego trzeba sprawdzić przed zwracanej wartości

var isEven = function(number) { 
// Your code goes here! 
    if(4 % 2 == 0) { 
     return true; 
    } else { 
     return false; 
    } 
}; 

Jeśli nie ma reszta jest liczbą parzystą, bo 2 dzieli go równo ze nic ponad. Zatem 3 moduł 2 zwraca 1, ponieważ 2 dzieli trzy raz i pozostawia 1 pozostałą.

Zgodnie z poniżej (wydaje się, że jest ono usunięte) komentarz wydaje się podczas rozmowy w liczbach ujemnych i dodatnich istnieje różnica pomiędzy modułem a pozostałą ale ściśle mówiąc javascript operator to jest to, co określa się jako:

Reszta operator zwraca resztę pozostałą, gdy jeden operand jest podzielony przez drugi operand. Zawsze przyjmuje znak dywidendy, a nie dzielnik. Używa wbudowanej funkcji modulo do wygenerowania wyniku, który jest całkowitą pozostałością podziału var1 przez var2 - na przykład - var1 modulo var2.Istnieje propozycja, aby uzyskać rzeczywistego operatora modulo w przyszłej wersji ECMAScript, z tą różnicą, że wynik operatora modulo przyjąłby znak dzielnika, a nie dywidendy.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators

Ponadto masz ciężko kodowane 4 do if tak będzie zawsze powrócić prawda! Parametrem funkcji jest liczba.

var isEven = function (number) { 
    // Your code goes here! 
    if (number % 2 == 0) { 
     return true; 
    } 
    else { 
     return false; 
    } 
}; 
+0

Dzięki za wspaniałą odpowiedź! Dlaczego inni mówili, żeby użyć parametru liczbowego. Nigdy nie miałem tego zdefiniowanego, więc jak to może być prawdą, jeśli 'liczba% 2 === 0 '. Próbowałem tego i było to poprawne. Po prostu nie rozumiem dlaczego. – Becky

+0

@Becky Zobacz w linii definicji funkcji "var isEven = function (number) {", w nawiasie po funkcji znajduje się miejsce, w którym definiujesz wejścia lub parametry do funkcji. Użytkownik zdefiniował parametr o nazwie number. Jest tak, że możesz przekazać wartość i przetestować ją względem funkcji. Tak więc za każdym razem, gdy to robisz: isEven (30) wewnątrz funkcji numer parametru posiada teraz wartość 30. Również nie ma problemu! Chętnie pomogę =] – AtheistP3ace

+0

Gotcha, więc właśnie robię instrukcję if, a później, jeśli podam wartość 'number', przetestuje to. – Becky

9

Spróbuj

var isEven = function(number) { 
 
    if(number % 2 === 0) { 
 
     return true; 
 
    } else { 
 
     return false; 
 
    } 
 
}; 
 

 
console.log(isEven(4)); 
 
console.log(isEven(3)); 
 
console.log(isEven(6));

piękniejsze w jednej linii

var isEven = function(number) { 
 
    return number % 2 === 0; 
 
}; 
 

 
console.log(isEven(4)); 
 
console.log(isEven(3)); 
 
console.log(isEven(6));

2

W if 4%2 daje 0 a to daje false jeśli stan dlatego, że nie działa.

zmiana jeśli oświadczenie

if(4%2==0)