2016-11-14 2 views
0

Не уверен, что здесь не так, но я пытаюсь добавить набор чисел в массиве (не весь массив), но, похоже, она подытоживает весь массив:Сумма в вложенных циклов возвращения неправильно

function sumPrimes(num) { 
 
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 
 
    var total = 0; 
 
    var index; 
 
    //loop through the whole array 
 
    for (var i = 0; i < arr.length; i++) { 
 
    //find matching prime number 
 
    if (num < arr[i]) { 
 
     // get index of prime number in the array 
 
     index = arr.indexOf(arr[i]); 
 
     //sum up total of prime numbers up to 'num' 
 
     for (var b = 0; b < index; b++) { 
 
     total = total + arr[index]; 
 
     } 
 
    } 
 
    } 
 
    return total; 
 
} 
 
sumPrimes(10);

+1

, пожалуйста, добавьте несколько вариантов использования или, по крайней мере, добавьте желаемый результат. –

+4

'index = arr.indexOf (arr [i]);' - это не просто запутанный способ сказать 'index = i' –

+0

console.log() - ваш друг, который поможет вам отлаживать. – epascarello

ответ

2

Если ваша цель вычислить сумму всех простых чисел меньше заданного числа, то решение намного проще.

Либо

function sumPrimes(num) { 
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 

    var total = 0; 

    for (var x of arr) { 
     if (x < num) 
      total += x; 
     else 
      break; 
    } 

    return total; 
} 

, который работает, когда обр сортируется или

function sumPrimes(num) { 
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 

    var total = 0; 

    arr.forEach(function(x) { 
     if (x < num) 
      total += x; 
    }, this); 

    return total; 
} 

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

+0

спасибо, но я на самом деле пытаюсь подсчитать сумму значений массива до индекса. поэтому для этого примера он должен рассчитывать от 2 до 11 – sammyb123

+0

@ sammyb123, что и делает мой код - он суммирует числа от 2 + 3 + 5 + 7 = 17. Или вы хотите подвести первые 10 чисел? –

-1

Вам нужно заменить индекс с Ъ:

//sum up total of prime numbers up to 'num' 
for(var b=0; b<index; b++){ 
    total = total + arr[b]; 
} 

EDIT: и избавиться от внешнего контура

+0

Все еще будет неправильно, вы правы, это должно быть 'b', но есть другой вопрос – epascarello

+0

и избавиться от внешней петли – holtc

+1

как установить индекс, если вы избавитесь от внешнего цикла? –

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