2016-07-27 33 views
0

Ich habe die folgende Reihe von Zahlen:zu finden versuchen, wenn Zahlen sind gerade/ungerade/Composite/Prime

var array = [5,9,12,19,23,24,31,44,49,62]; 

und ich für jeden, um herauszufinden versuchen, wenn sie entweder selbst und Composite sind, ungerade und zusammengesetzt oder ungerade und Primzahl. Ich begann, indem sie versuchen, die Zahlen zu finden, die auch und Composite:

for (i = 0; i < array.length; i++) { 
    if (array[i]%2 === 0 && array[i]%i === 0) { 
     console.log(array[i]+" is even and composite") 
    } 
} 

Das Problem ist, ich nur 12, wenn ich 12,24,44,62 bekommen sollte. Es scheint bei 12 zu stoppen. Was könnte das Problem sein?

Vielen Dank.

+1

Der Vergleich 'array [i]% === i 0 'überprüft wird, ob nicht' array [i] 'eine zusammengesetzte Zahl ist oder nicht, sondern ist die Überprüfung, ob' array [i] 'teilbar durch "ich". Für die Fälle 24, 44 und 62 machen sie Ihre Bedingung nicht wahr, weil 24 nicht durch 5 teilbar ist, 44 nicht durch 7 teilbar ist und 62 nicht durch 8 teilbar ist. Sie müssen Ihre Bedingung umarbeiten Überprüfen Sie, ob eine Zahl zusammengesetzt ist oder nicht. –

+0

Nun, weder ist 12 teilbar durch 5, aber es zeigt es immer noch irgendwie. –

+1

Wenn Sie 12 auswerten, hat "i" den Wert 2, durch den 12 teilbar ist. Zur Klärung wird derzeit überprüft, ob eine Zahl gerade ist (durch 2 teilbar) und durch ihren Index im Array teilbar ist. –

Antwort

1

Sie könnten jedes Problem als eine Funktion angehen, um es einfacher zu machen.

Zum Beispiel: die geraden Zahlen im Array finden

function isEven(n) { 
    return (n % 2) === 0 //to get even numbers 
} 

function isOdd(n) { 
    return (n % 2) === 1 //to get odd numbers 
} 

dann eine andere Funktion schreiben, für die zusammengesetzten und Primzahlen zu überprüfen. Wird nicht lustig sein, wenn ich die ganze Arbeit für dich mache.

function isComposite(n) { 
    //Enter check for composite numbers here 
} 

function isPrime(n) { 
    //Enter check for prime numbers here 
} 

und dann die geraden Zahlen im Array erhalten Sie einfach die Filtermethode für Arrays verwenden könnte Ihre bereits geschriebenen Prüffunktionen als Argumente zu übergeben, wenn Sie nicht wissen, was sie sehen es liegt. Aber im Grunde prüft es, ob jedes Element in einem Array einen Test besteht und dann eine andere Funktion daraus erstellt.

Sie können die Funktionsaufrufe auch verketten, um gerade und zusammengesetzte Zahlen zu finden.

array.filter(isEven).filter(isComposite) //would give you all the even and composite numbers in your array