1

下面只是我的代码的一部分,但我知道这是有问题的,因为我无法让它返回除“未定义”之外的任何值。我已经经历了几个小时,无法弄清楚。

我希望能够输入一个数字并将其因子推送到一个数组中。我已经通过警告数组中的第一项来测试它,但我什么也没得到。我敢肯定这很容易,但我就是想不通。这是代码:

    var numberInQuestion = prompt("Of what number are you wanting to find the largest        prime factor?");

    //determine factors and push to array for later use
    var factorsArray = [];
    function factors(numberInQuestion){
        for(var i = 2; i < numberInQuestion-1; i++){
            if(numberInQuestion % i === 0){
                return factorsArray.push[i];
            } else {
                continue;
            }
        }
    };
    factors(numberInQuestion);
    alert(factorsArray[0]);

谢谢你的帮助!

4

4 回答 4

2
  • 你只能返回一个
  • 你必须使用(),而不是[]调用push
  • factorsArray应该是本地的factors(将定义放在函数内)
  • else { continue; }是没用的

这是完全更正的代码:

var numberInQuestion = prompt("Of what number are you wanting to find the factors of?");

//determine factors
function factors(numberInQuestion){
    var factorsArray = []; // make it local
    for (var i = 2; i < numberInQuestion-1; i++){
        if(numberInQuestion % i === 0){
            factorsArray.push(i); // use (), and don't return here
        } // no need for else { continue; } because it's a loop anyway
    }
    return factorsArray; // return at the end
};
var result = factors(numberInQuestion); // assign the result to a variable
alert(result);

这是一个 JSFiddle

于 2013-09-01T15:28:21.907 回答
1

您的推送语法有错误。推送的正确语法是 -

factorsArray.push(i);

在找到第一个除数后立即从函数返回也不会给你完整的列表。在找出所有除数后,您可能想返回。

考虑到以上所有因素,您应该将函数重写如下 -

function factors(numberInQuestion){

    for(var i = 2; i < numberInQuestion - 1; i++){
        if(numberInQuestion % i === 0) {
            factorsArray.push(i);
        }
    }
}

你会没事的。

于 2013-09-01T15:29:08.347 回答
0

您已经对此进行了编码,以便当您找到第一个因素时,您的函数会立即返回。只需删除return该语句中的关键字即可。(“返回”在 JavaScript 和其他类似语言中的含义是立即退出函数并从调用函数的位置恢复。)

哦,还有,你用括号而不是方括号调用函数(如.push()) 。

于 2013-09-01T15:27:31.430 回答
0

推送到数组时,该函数不应返回。执行循环后返回数组。该else子句也是不必要的。

var numberInQuestion = prompt("Of what number are you wanting to find the largest        prime factor?");

function factors(numberInQuestion){
    var factorsArray = [];
    for(var i = 2; i < numberInQuestion-1; i++){
        if(numberInQuestion % i === 0 && isPrime(i)){
            factorsArray.push(i);
        }
    }
    return factorsArray; 
};
var factors = factors(numberInQuestion);
alert(factors[factors.length-1]);

//From: http://stackoverflow.com/questions/11966520/how-to-find-prime-numbers
function isPrime (n)
{
    if (n < 2) return false;
    var q = Math.sqrt (n);

    for (var i = 2; i <= q; i++)
    {
        if (n % i == 0)
        {
            return false;
        }
    }

    return true;
}

鉴于示例的目的,必须考虑两个项目

该代码无法确定该数字是否实际上是素数。代码将返回可能的最小因子,因为循环从 2 开始并递增,然后返回数组中的第一个元素。最大的因素实际上是数组中的最后一个元素。我已经更正了这个例子以找到最大的素数。你可以通过这个小提琴测试它:http: //jsfiddle.net/whKGB/1/

于 2013-09-01T15:30:18.723 回答