我只是在学习编程,并试图让程序以二进制计算。
我创建了一个可以将提供的十进制转换为二进制的函数,它看起来工作正常,但是当我尝试使用for循环向上计数时,我的浏览器冻结了,我无法理解为什么。使用类似的while循环产生我需要的结果。
问题是在底部注释掉了。请帮忙弄清楚我在这里做错了什么。
这是我的代码:
function isOdd(num) {return num % 2};
var toBinary = function (number) {
ints = [];
binary = [];
ints.push(Math.floor(number));
while (number >= 1) {
number = (Math.floor(number))/2;
ints.push(Math.floor(number));
}
for (i=ints.length-1;i>=0;i--) {
if (isOdd(ints[i])) {
binary.push(1);
} else {
binary.push(0);
}
}
if (binary[0] === 0) {
binary.splice(0,1);
}
return binary;
};
var count = 0;
while (count <= 50) {
console.log(toBinary(count));
count++;
}
/*
for (i=1;i<=50;i++) {
console.log(toBinary(i));
}
*/
答案 0 :(得分:1)
您尚未在i
函数中声明toBinary
,因此在最后一个循环中i
的每次调用都会重新定义toBinary
,i
永远不会达到50岁。
使用var
声明变量,如下所示:
var toBinary = function (number) {
var ints = [],
binary = [],
i;
:
}
答案 1 :(得分:1)
使用for (var i=ints.length-1;i>=0;i--)
和for (var i=1;i<=50;i++)
,否则i
将成为全局变量,并且会在toBinary
内覆盖。