Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Простые числа (https://javascript.ru/forum/misc/62186-prostye-chisla.html)

Maine 28.03.2016 17:37

Простые числа
 
Вложений: 1
Привет! Кто может объяснить, почему limit становится undefined? Это происходит во время второй итерации во внешнем цикле

ruslan_mart 28.03.2016 17:50

Maine, потому что Вы явно присваиваете ему undefined.

рони 28.03.2016 17:52

Maine,
а код не судьба вставить вместо картинки?
Цитата:

Сообщение от Maine
почему limit становится undefined?

а зачем limit в 5 строке?

Maine 28.03.2016 18:09

function PrimeNumbers(limit) {

    var result = [2];
    var max = Math.floor(Math.sqrt(limit));
    var number = 3;
    var isPrime = false;
    
    for (number; number <= limit; number+=2) {
        for (var c = 2; c < number; c++) {
            if (number%c == 0) {
                isPrime = false;
                break; 
            } else {
                isPrime = true;
            }
            
        }
        
        if(isPrime) {
            result.push(number);
        }
        
        return result;
    }
    
    
}

console.log(PrimeNumbers(100));

Maine 28.03.2016 18:09

Цитата:

Сообщение от Ruslan_xDD (Сообщение 412293)
Maine, потому что Вы явно присваиваете ему undefined.

Не поняла, где?

Strongman 28.03.2016 18:21

Возможно это из-за других ошибок:
1) строка 8: for(number; number <= limit; number+=2) {
вместо этого напишите:
for(number = 3; number <= limit; number+=2) {
2) строка 3: var result = [2];
просто написать:
var result = 2;

Dilettante_Pro 28.03.2016 18:25

Maine,
Что-то я не вижу никаких undefined. Все работает.

function PrimeNumbers(limit) {

    var result = [2];
    var max = Math.floor(Math.sqrt(limit));
    var number = 3;
    var isPrime = false;
    
    for (number; number <= limit; number+=2) {
        for (var c = 2; c < number; c++) {
            if (number%c == 0) {
                isPrime = false;
                break; 
            } else {
                isPrime = true;
            }
            
        }
        
        if(isPrime) {
            result.push(number);
        }
        
        return result;
    }
    
    
}

alert(PrimeNumbers(100));

Maine 29.03.2016 10:43

Цитата:

Сообщение от Dilettante_Pro (Сообщение 412303)
Maine,
Что-то я не вижу никаких undefined. Все работает.

Как работает, када на выходе массив с двумя элементами 2 и 3?

Dilettante_Pro 29.03.2016 11:24

Maine,
Результат получается в соответствии с вашим кодом:
В строке 3 первый result
var result = [2];

В строке 20 - второй
result.push(number);

Dilettante_Pro 29.03.2016 11:53

Maine,
Одно маааленькое изменение в вашем коде
function PrimeNumbers(limit) {

    var result = [2];
    var max = Math.floor(Math.sqrt(limit));
    var number = 3;
    var isPrime = false;
    
    for (number; number <= limit; number+=2) {
        for (var c = 2; c < number; c++) {
            if (number%c == 0) {
                isPrime = false;
                break; 
            } else {
                isPrime = true;
            }
            
        }
        
        if(isPrime) {
            result.push(number);
        }
        
       
    }
    return result;
    
}

alert(PrimeNumbers(100));


Часовой пояс GMT +3, время: 04:46.