// 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消息的所有数字相加!关于如何解决这个问题的任何想法?
答案 0 :(得分:6)
我发现您的代码存在三个问题。 (不计算大括号的奇怪格式。)
编辑:看起来问题自我开始回答以来已多次更新。 在“if odd”测试中,您将数字设置为零也许你的意思是将偶数数字归零,以便以后可以将所有数字相加而只得到奇数,但test[i]=0
不是if / else结构的一部分。看起来应该是因为缩进,但JavaScript会忽略额外的空白区域。
您没有将数字添加到循环中的sum
。
由于这一行你正在获得NaN:
sum=0+test[i];
该语句在循环结束之外,因此此时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;
}
}