2014-10-06 3 views
0

Я пытаюсь написать эту программу, чтобы найти простые числа. У меня есть основы этого, за исключением того, что независимо от того, какой номер я вставляю, он возвращается как НЕ простой. Я слишком долго возился с этим и не могу понять, что это такое. Является ли это в моем выражении «if» или моей функции isPrime? Пожалуйста, помогите, и спасибо!Почему все не просто?

var number = 0; 

function main() 
{ 
    number = parseInt(prompt("Please Enter a Number to Determine Whether or Not it is Prime:", "Enter a Number")); 
    while(isNaN(number) === true) 
     { alert("You Entered an Invalid Number. Please Reenter"); 
     number = parseInt(prompt("Please Enter a Number to Determine Whether or Not it is Prime:", "Enter a Number")); 
     } 

    isPrime(number); 

    if(prime = false) 
     { alert("The number " + number + " is a Prime Number!"); } 
    else 
     { alert("The number " + number + " is NOT a Prime Number!"); } 
} 
/*------------------------------------------------------*/ 
function isPrime(number) 
{ 
    if(number < 2) 
     {return false;} 

    var prime = false; 

    for(var i = 2; i <= Math.sqrt(number); i++) 
    { if(number % i == 0) 
     {prime = true;} 
    } 

    return prime; 
} 
+2

Вам не нужно писать '=== true'; 'true' уже' истина'. Аналогичным образом используйте '!'. – SLaks

+1

Позвольте мне сказать, что я нахожу ваши скобки оскорбительными: -/ –

+1

'if (prime = false)' должно быть 'if (prime == false)' или лучше 'if (! Prime)'. Для атрибуции используется один '='. – melancia

ответ

1

Заменить:

if(prime = false) 

не только потому, что вы используете назначение вместо сравнения, а потому, что премьер не определен (он не собирается возвращаться/создать глобальную переменную prime из этого вызова функции).

Замените его:

if (!isPrime(number)) { 

Теперь это не использовать переменную для хранения результата вызова IsPrime, но использует вызов напрямую. Если вам нужен этот результат более чем в одном месте, то это было бы хорошей идеей, чтобы присвоить его переменной:

var prime = isPrime(number); 

, а затем сделать остальную часть кода:

if (prime == false)... 
3
if (prime = false) 

Вы просто назначены prime ложь.

Вы не хотите этого делать.

В отличие от этого, вы хотите назначить его на результат своей функции.

+2

Также стоит отметить, что возвращаемое значение 'isPrime()' все равно игнорируется. – Pointy

+0

Является ли объем внутри и для другого? Потому что '{prime = true;}' – DanFromGermany

+0

@DanFromGermany не уверен, что вы имеете в виду; переменная 'prime' в' isPrime() 'функция является локальной для этой функции. Вызывающий код игнорирует возвращаемое значение. – Pointy

1
isPrime(number); 

не оставляет переменной. Поэтому prime никогда не назначается в вашем тесте, а неназначенные переменные считаются ложными в отношении булевых выражений.

Это должно быть

var prime = isPrime(number); 

Вы также делаете задание, где вы имели в виду, чтобы сделать сравнение.

if(prime = false) 

должен быть

if(prime === false) 

Совет: Если вы делаете эти виды испытаний, обычно это хорошая идея, чтобы положить вещь, которая не может быть изменена путем присвоения слева (функция вызов, константа и т. д.). Таким образом, если вы случайно положили = вместо == или ===, скрипт завершится с ошибкой.

if(false === prime) 

Если вы случайно ввести

if (false = prime) 

вы получите

ReferenceError: invalid assignment left-hand side

, которая очевидна и легко отлаживать.

Поскольку это простой логический переключатель, простая проверка «не является истинной» в порядке.

if (!prime) 
1

На самом деле их всего лишь 2 небольших сбоя.

Вы определяете «prime» внутри вашей функции isPrime() - следовательно, вы не можете использовать его вне своей функции. Вы пытаетесь сделать if (prime = false), который присваивает значение false для «prime» whick ничего не делает для вашего, если не сломать его.

Вы должны определить переменную вне поэтому использовать ваш prime = isPrime()

Также вам не нужно, чтобы проверить против «ложных», которые любыми средствами не имеет смысла их. "true = false"? просто пропустите, что ans попросят if (prime), который является истинным или ложным.

Alternativly вы можете позвонить Funtion directily в состоянии, если как:

if(isPrime(number)){.... 

тогда автоматически проверяет возвращаемое значение.

+0

Почему это вниз? Это выглядит правильно для меня. Он единственный, кто заметил, что просто исправление условия 'if' вызовет * ReferenceError *. –

+0

Mhm Возможно, потому что theire являются действительными для ошибок в коде, я даже не заметил, что автор использует = для проверки значения, я буду отражать это в редактировании, чтобы также включить это значение – Shaeldon

+0

Да, вы не были явно о ' if', но ваши решения, похоже, все равно исправляли. –

Смежные вопросы