计算一个数字中的孔数

时间:2016-05-05 19:43:03

标签: javascript

我试图弄清楚如何计算'#34;孔的数量"在一个数字。也就是说,其中8有两个孔,0,4,6,9有一个孔,其余没有。

出于某种原因,我得到了一个未定义的回归,我把头发拉过来。我错过了什么吗?

var numOfHoles = 0;

   for (i = 0; i < num.length; i++) {

   if (num === 8) {
       numOfHoles += 2; 
      }
       else if (num === 0 || num === 4 || num === 6 || num === 9) {
           numOfHoles++;
    }
     else
        numOfHoles;
  }
    console.log(numOfHoles);
}

6 个答案:

答案 0 :(得分:1)

除非你复制它时顶部缺少一些代码,否则你需要删除尾部括号或将其声明为函数(见下文)。

编辑:这是一个奇怪的问题。首先,使用num上的索引引用的答案可能无法按预期工作。最简单但可能不是最好的答案是将数字转换为字符串,然后索引并与字符而不是数字进行比较。

正如其他人提到的那样,如果你保持正确的代码格式,它会让事情变得更容易:)

function countNumHoles(num) {
        var numOfHoles = 0;

        var numStr = num.toString();

        for (i = 0; i < num.toString().length; i++) {
            if (numStr[i] === '8') {
                numOfHoles += 2;
            } else if (numStr[i] === '0' || numStr[i] === '4' || numStr[i] === '6' || numStr[i] === '9') {
                numOfHoles++;
            }
        }

        console.log(numOfHoles);
    }

答案 1 :(得分:1)

我猜你正在寻找这样的东西:

application/config/autoload.php

你有多个小错误。 首先,你不需要var num = [9,4,5]; var numOfHoles = 0; for (i = 0; i < num.length; i++){ if (num[i] == 8) { numOfHoles += 2; } else if (num[i]== 0 || num[i]== 4 || num[i]== 6 || num[i]== 9) { numOfHoles++; } } console.log(numOfHoles); ,这并不意味着什么。 如果您尝试检查每个元素以使用元素的索引,那么您需要使用else { numOfHoles }

答案 2 :(得分:1)

只需取数字,将其拆分为一个整数数组,然后使用箭头函数作为参数,以减少从数字到孔图的相关值的总和。

function numHoles(n){
       return (""+n).split('').reduce((t,i) => t+=+"1000101021"[i],0);
}
document.write(numHoles(48488621597));

答案 3 :(得分:0)

问题在于你错误地设计了代码,因此很难看到错误。代码的正确标识如下:

var numOfHoles = 0;

for (i = 0; i < num.length; i++) {

    if (num === 8) {
       numOfHoles += 2; 
    } else if (num === 0 || num === 4 || num === 6 || num === 9) {
        numOfHoles++;
    } else
        numOfHoles;

    console.log(numOfHoles);
}

现在,通过正确的标识,您可以轻松地看到else numOfHoles;不需要,num ins定义,长度适用于字符串或数组。此外,console.log在循环外更好,只运行一次。这是一个功能版本:

var numOfHoles = 0;
limit = 5;

for (num = 0; num <= limit; num++) {

    if (num === 8) {
       numOfHoles += 2; 
    } else if (num === 0 || num === 4 || num === 6 || num === 9) 
        numOfHoles++;
}

console.log(numOfHoles);

答案 4 :(得分:0)

考虑到最重要的答案,你有一些大括号的错误。但是你在计算数组中的孔数,但你没有索引。这是我的测试片段。它与空的numOfHoles无关。但我仍然建议删除它。

var numOfHoles = 0;
var num = [4,0,9,8,5,5,5];
for (i = 0; i < num.length; i++) {

if (num[i] === 8) {
    numOfHoles += 2;
}
else if (num[i] === 0 || num[i] === 4 || num[i] === 6 || num[i] === 9) {
    numOfHoles++;
}
else
    numOfHoles;
}
console.log(numOfHoles);

答案 5 :(得分:0)

这很难回答。您在变量“num”中使用了length属性。但严格使用比较。规则如果总是假的,考虑到(字符串“8”!== 8)。这种类型的比较要求变量具有相同的类型。在这种情况下,您使用整数或数组并使用变量i来访问循环中的元素

解决方案,或者您以字符串形式出现并使用以下系统[if(num ===“8”)],或者致力于成为int,或使用数组(推荐)。要了解我们需要查看更多代码的最佳解决方案。

您的代码应该保持这种状态。当然,如果您需要更具体的内容,请告诉我们

var num = [0,2,8,5];
var numOfHoles = 0;

for (i = 0; i < num.length; i++){
    if (num[i] == 8)
    {
        numOfHoles += 2;
    }
    else if (num[i]== 0 || num[i]== 4 || num[i]== 6 || num[i]== 9)
    {
        numOfHoles++;
    }
}
console.log(numOfHoles);