编写程序以在数组中添加所有奇数

时间:2011-10-24 02:04:15

标签: javascript

 // Write a program to sum all the odd elements of an array

    a = Number(prompt("a:"));
    b = Number(prompt("b:"));
    c = Number(prompt("c:"));

    sum=Number(0);

    var test = [a,b,c];

    for (i=0; i<test.length;i++) {
        // All even numbers can be divided by 2
        if ((test[i]%2)>0) {
            alert(test[i] + ":odd");
        } else {
            alert(test[i] + ":even");
        }
        test[i]=0;
   }

   sum=0+test[i];
   alert(sum);

我的程序运行良好,直到它意味着将它返回NaN消息的所有数字相加!关于如何解决这个问题的任何想法?

3 个答案:

答案 0 :(得分:6)

我发现您的代码存在三个问题。 (不计算大括号的奇怪格式。)

  1. 编辑:看起来问题自我开始回答以来已多次更新。 在“if odd”测试中,您将数字设置为零也许你的意思是将偶数数字归零,以便以后可以将所有数字相加而只得到奇数,但test[i]=0不是if / else结构的一部分。看起来应该是因为缩进,但JavaScript会忽略额外的空白区域。

  2. 您没有将数字添加到循环中的sum

  3. 由于这一行你正在获得NaN:

    sum=0+test[i];
    
  4. 该语句在循环结束之外,因此此时i等于数组的长度,test[i]undefined

    尝试以下伪代码:

    sum = 0
    for (loop through the array) {
       if current number is odd
          sum = sum + current number
    }
    

答案 1 :(得分:4)

你的总和(sum = 0 + test [i];)在for循环之外。您应该在for循环中移动它以获得“sum”变量中的总和。

答案 2 :(得分:4)

var A= [17, 6, 19, 27, 56, 73, 43, 70, 41, 48, 
10, 69, 22, 71, 53, 11, 40, 72, 32, 25, 14, 54, 
13, 38, 62, 66, 2, 37, 60, 75, 52, 33, 58, 30, 
61, 5, 57, 49, 21, 34, 67, 51, 16, 45, 64, 24, 
23, 20, 47, 65, 46, 18, 1, 44, 15, 42, 68, 26, 
74, 7, 55, 36, 8, 50, 9, 59, 31, 3, 4, 29, 
35, 39, 63, 12, 28];

A.filter(function(i){return i%2}).reduce(function(a, b){return a+b});

返回值:(数字)1444

//equalizer for old browsers
if(![].filter){
    Array.prototype.filter= function(fun, scope){
        var T= this, A= [], i= 0, itm, L= T.length;
        if(typeof fun== 'function'){
            while(i< L){
                if(i in T){
                    itm= T[i];
                    if(fun.call(scope, itm, i, T)) A[A.length]= itm;
                }
                ++i;
            }
        }
        return A;
    }
}
if(![].reduce){
    Array.prototype.reduce= function(fun, temp, scope){
        var T= this, i= 0, len= T.length, temp;
        if(typeof fun=== 'function'){
            if(temp== undefined) temp= T[i++];
            while(i < len){
                if(i in T) temp= fun.call(scope, temp, T[i], i, T);
                i++;
            }
        }
        return temp;
    }
}