Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将产品与while和for循环进行比较_Javascript_Palindrome - Fatal编程技术网

Javascript 将产品与while和for循环进行比较

Javascript 将产品与while和for循环进行比较,javascript,palindrome,Javascript,Palindrome,我正在编写一个脚本,可以找到任何两个3位数的回文数字的所有乘积,下面是我正在编写的脚本,用于确定一个数字是否为回文数字,并比较3位数的乘积- var isPalindrome = function(number) { var number = number.toString(); var length = number.length; var x = 0; var y = 1; while (x<=(length/2)) { if(number[x]==number[length-

我正在编写一个脚本,可以找到任何两个3位数的回文数字的所有乘积,下面是我正在编写的脚本,用于确定一个数字是否为回文数字,并比较3位数的乘积-

var isPalindrome = function(number) {
var number = number.toString();
var length = number.length;
var x = 0;
var y = 1;
while (x<=(length/2)) {
    if(number[x]==number[length-y]) {
        x++;
        y++;
    } else {
        return false;
    }
    return true;
}
};

var counter = function() {
var palindromeProducts = [];
var x = i;
var y = 100;
var product = x*y; 
while (y<1000) {
    for (i=100; i<1000; i++) {
        if (isPalindrome(product)) {
            palindromeProducts.push(x*y);
        }
    }
    y++;
}
console.log(palindromeProducts);
};

counter();
isAlindrome函数似乎适用于长度小于17位的回文,但对于某些非回文的数字,它也会返回true,我不知道为什么


palinProduct函数的思想是,在while循环中,for循环将遍历x的所有值并比较产品,然后while循环将增加y,然后再次运行for循环,但它似乎不起作用。

您的误报可能是由于isPalindrome函数中的while循环不正确造成的。函数在循环的第一次迭代中返回true

while (x<=(length/2)) {
    if(number[x]==number[length-y]) {
        x++;
        y++;
    } else {
        return false;
    }
    return true; // this is in the wrong place, I believe
}
我想你打算做的是:

while (x<=(length/2)) {
    if(number[x]==number[length-y]) {
        x++;
        y++;
    } else {
        return false;
    }
}
return true;

在isAlindrome函数中,return true语句应该位于while循环之外。Quantastical指出了这一点

在计数器功能中,存在几个问题。i在初始化之前被分配给x。x在循环外部被赋值一次,然后再也不会更改。产品在循环之外被赋值一次,并且永远不会改变。通过使用在x和y上迭代的两个for循环,可以简化代码

修复的代码可能看起来像

var isPalindrome = function(number) {
    var number = number.toString();
    var length = number.length;
    var x = 0;
    var y = 1;
    while (x<=(length/2)) {
        if(number[x]==number[length-y]) {
            x++;
            y++;
        } else {
            return false;
        }
    }
    return true;
};

var counter = function() {
    var palindromeProducts = [];
    for (var x = 100; x < 1000; x++) {
        for (var y = 100; y < 1000; y++) {
            var product = x*y; 
            if (isPalindrome(product)) {
                palindromeProducts.push(product);
            }
        }
    }
    console.log(palindromeProducts);
};

函数isAlindromenum{var str=num.toString.split;返回str.join==str.reverse.join;}谢谢!这确实解决了误报问题!虽然我仍然得到一个超过17位数字的假数字,但我不明白…谢谢!我能够在第一个函数上使用Quantastical的帮助,并且消除了误报,您对第二个函数的反馈正是我所需要的,我能够让它与for和while循环一起工作,但是我认为for循环稍微简单一点,您是对的。