javascript - Counting number of holes in a number - Stack Overflow

I'm trying to figure out how to count the number of "holes" in a number. That is, where

I'm trying to figure out how to count the number of "holes" in a number. That is, where 8 has two holes and 0, 4, 6, 9 have one hole and the rest have none.

For some reason I'm getting a return of undefined and I'm pulling my hair out over it. Am I missing something?

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);
}

I'm trying to figure out how to count the number of "holes" in a number. That is, where 8 has two holes and 0, 4, 6, 9 have one hole and the rest have none.

For some reason I'm getting a return of undefined and I'm pulling my hair out over it. Am I missing something?

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);
}
Share Improve this question asked May 5, 2016 at 19:43 AdmiralCuddlesAdmiralCuddles 1171 gold badge1 silver badge6 bronze badges 9
  • 6 I see an extra }... – Eugene Sh. Commented May 5, 2016 at 19:44
  • 5 Is num a string (suggested by having a .length property) or a number (as suggested by paring it strictly with numbers)? It can't be both. – Bergi Commented May 5, 2016 at 19:45
  • 2 What is else numOfHoles; supposed to do? – Martin Smith Commented May 5, 2016 at 19:45
  • 1 Why not just use a switch? there are only so many numbers to deal with (10, I've been told) – ssube Commented May 5, 2016 at 19:46
  • you have a mix of 1-line statements which do not require brackets at all, plus bracketed code. Line them up. – nurdyguy Commented May 5, 2016 at 19:46
 |  Show 4 more ments

6 Answers 6

Reset to default 2

Simply take the number, split it into an array of ints, and then use an arrow function as the argument for reduce to total the correlating value from the number to holes map.

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

I guess you are looking for something like this :

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);

You had multiple little error. First of all you didn't need else { numOfHoles } which dont mean anything. And you need if you try to check every elements to use the indexation of the element so you need to use num[i].

Unless there was some code missing from the top when you copied this over, it looks like you need to either remove the trailing bracket or declare this as a function (see below).

Edit: This is a strange question. Firstly, the answers referencing using an index on num might not work as expected. The easiest, but possibly not best, answer would be to convert the number to a string, then index and pare to characters instead of numbers.

As everyone else has mentioned, it makes things much easier if you maintain proper code format :)

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);
    }

The problem is that you idented wrongly the code, so it's harder to see the errors. The correct identation of your code goes like this:

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);
}

So now with the correct identation you can easily see that else numOfHoles; isn't needed, num ins't defined and length is for string or arrays. Also console.log is better outside the loop in order to run only once. Here is a functional version:

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);

Considering all the answers on top, you have some mistakes with braces. But you are counting num of holes in array, but you don't have indexes. Here is my test snippet. And it has nothing to do with empty numOfHoles. But i still remend to remove it.

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);

It's kind of hard to answer. You used the length property in the variable "num". But strictly used the parison. The rule if always be false, considering that (string "8" !== 8). This type of parison requires that the variables have the same type.In this case or you use an integer or an Array and uses the variable i to access your elements in the loop for

Solution, or you es in as a string and uses the following system [if (num === "8")], or working on being a int, or work with an array (remended). To know the best solution we needed to see more of the code.

Your code should stay that way. Of course, if you need something more specific, let us know

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);

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744153930a4560767.html

相关推荐

  • javascript - Counting number of holes in a number - Stack Overflow

    I'm trying to figure out how to count the number of "holes" in a number. That is, where

    9天前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信