验证数字数据Javascript

时间:2014-01-19 18:47:37

标签: javascript

我正在用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 !== "");

4 个答案:

答案 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方法,例如filterreduce。这些方法在某种程度上是for循环的替代方案,具有一些预定义的行为和回调函数。

现在,让我们考虑解决问题所涉及的步骤。

  1. 从用户处获取号码。我们可以将这些数据表示为数组,就像您已经在做的那样。
  2. 我们想要所有奇数,它们的总和和平均值。
  3. 我们想要所有偶数,它们的总和和平均值。
  4. 我们向用户显示数据。
  5. 在这个解决方案中,我假设你已经拥有了一个包含数据的数组,并将重点关注第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}