我正在用Javascript编写一个程序来分隔偶数和奇数,将它们放入一个数组中,加上数字的总和,然后找出平均值。
我遇到了一个不允许零点计数的问题。因为它添加到数组,当用户输入6+6
时,sum为12
,由于数组中的额外4
,平均值计算为0
。
无论如何不允许零计数?这是我到目前为止所拥有的......
var evenarray = [];
var oddarray = [];
var avgEven = 0;
var avgOdd = 0;
var isValid;
function numberFunction(){
do
{
var numbers = prompt("Please enter numbers. Enter empty string to exit.");
if(numbers % 2 == 0)
{
evenarray.push(numbers);
var sumEven = 0;
for (var i=0; i < evenarray.length; i++)
{
sumEven = sumEven + Number(evenarray[i]);
}
var avgEven = sumEven/evenarray.length;
//alert("even");
}
if(numbers % 2 !== 0)
{
oddarray.push(numbers);
var sumOdd = 0;
for (var i=0; i < oddarray.length; i++)
{
sumOdd = sumOdd + Number(oddarray[i]);
}
var avgOdd = sumOdd/oddarray.length;
//alert("odd");
}
//if(isNaN(numbers)){
//alert("Only numeric data only");
//}
}
while(numbers !== "");
答案 0 :(得分:1)
当数字实际为0
时,不执行任何操作:
if (numbers == 0)
{
}
else if(numbers % 2 == 0)
{
evenarray.push(numbers);
var sumEven = 0;
for (var i=0; i < evenarray.length; i++)
{
sumEven = sumEven + Number(evenarray[i]);
}
var avgEven = sumEven/evenarray.length;
}
else // only odds remain
{
oddarray.push(numbers);
var sumOdd = 0;
for (var i=0; i < oddarray.length; i++)
{
sumOdd = sumOdd + Number(oddarray[i]);
}
var avgOdd = sumOdd/oddarray.length;
}
答案 1 :(得分:0)
你可以这样做:
if(numbers % 2 == 0 && numbers !=0) ...
if(numbers % 2 != 0 && numbers !=0) ...
以便在数字== 0;
时不做任何事情将变量数字称为数字而不是数字,这有点奇怪。
答案 2 :(得分:0)
你的功能应该是,
function numberFunction(){
do
{
var numbers = prompt("Please enter numbers. Enter empty string to exit.");
if(numbers !=0 && !isNaN(numbers))
(numbers %2 == 0)? (evenarray.push(parseInt(numbers))) : (oddarray.push(parseInt(numbers)));
}while(numbers !== "");
for(var i = 0; i < evenarray.length; i++)
sumEven += evenarray[i];
for(var i = 0; i < oddarray.length; i++)
sumOdd += oddarray[i];
avgEven = sumEven / evenarray.length;
avgOdd = sumOdd / oddarray.length;
document.getElementById("even").innerHTML = evenarray.toString();
document.getElementById("sumEvenTotal").innerHTML = sumEven.toString(); //displays sum of even numbers.
document.getElementById("averageOdd").innerHTML = avgOdd; //displays average of odd numbers.
document.getElementById("averageEven").innerHTML = avgEven; //diplays average of even numbers.
document.getElementById("odd").innerHTML = oddarray.toString(); //displays all odd numbers that were entered.
document.getElementById("sumOddTotal").innerHTML = sumOdd.toString();
}
答案 3 :(得分:0)
由于您已经有针对特定问题的解决方案的其他答案,我建议采用不同的方法。想想你正在操纵的数据:一个数组。尝试只用数据解决问题,没有用户输入,没有DOM操作;只是数据。这有助于区分问题,并使您的代码更易于理解。
由于我们正在使用数组,因此我们可以使用现代浏览器中的一些内置JavaScript方法,例如filter
和reduce
。这些方法在某种程度上是for
循环的替代方案,具有一些预定义的行为和回调函数。
现在,让我们考虑解决问题所涉及的步骤。
在这个解决方案中,我假设你已经拥有了一个包含数据的数组,并将重点关注第2点和第3点。请记住,考虑数据,用户交互不应与数据逻辑混合。您可以直接向用户询问数字列表,而不是向用户询问每个循环上的数字。您可以通过这种方式避免多个提示,并且可以很好地分离数据和交互。理想情况下,您将验证所有用户输入以符合您的要求。
// Helpers to work with numbers
var odd = function(x) {
return x % 2 === 0;
};
var even = function(x) {
return x % 2 !== 0;
};
var add = function(x, y) {
return x + y;
};
function solve(ns) {
// Solve the problem
// with odd or even numbers
var result = function(fn) {
var xs = ns.filter(fn); // odd or even
var sum = xs.reduce(add);
return {
numbers: xs,
sum: sum,
average: sum / xs.length
};
};
// Return an object
// with odd and even results
return {
odd: result(odd),
even: result(even)
};
}
var numbers = [1,2,3,4]; // from user input
var result = solve(numbers);
console.log(result.odd);
//^ {numbers: [2,4], sum: 6, average: 3}
console.log(result.even);
//^ {numbers: [1,2], sum: 4, average: 2}