无论我在哪里运行javascript代码,它都会冻结我的计算机,为什么会发生这种情况请告诉我?
这对我来说就像一个无止境的循环。尝试将条件修改为y>=1无论我在哪里运行javascript代码,它都会冻结我的计算机,为什么会发生这种情况请告诉我?,javascript,Javascript,这对我来说就像一个无止境的循环。尝试将条件修改为y>=1 var y; function deci(y) { var res = ""; while (y != 1) { res = res + y % 2; y = y / 2; } return (1 + res); } 三个问题 全局y是一种糟糕的做法——你和一个本地y在一起,所以我猜你并不打算这么做 您的while状态被破坏–重复将数字除以2并不总是达到1 JavaScript执行浮点除法,因此需要截
var y;
function deci(y) {
var res = "";
while (y != 1) {
res = res + y % 2;
y = y / 2;
}
return (1 + res);
}
三个问题
全局y是一种糟糕的做法——你和一个本地y在一起,所以我猜你并不打算这么做
您的while状态被破坏–重复将数字除以2并不总是达到1
JavaScript执行浮点除法,因此需要截断十进制数
这可能就是你想写的
常数deci=y=>
{
设res=
而y>=2
{
res=res+字符串y%2
y=y/2>>0
}
返回res+字符串y
}
console.log deci 0
console.log deci 1
console.log deci 2
console.log deci 3
console.log deci 4
console.log deci 5当您调用deci3时,y永远不会变为1,因此您将得到一个无限循环。唯一不会导致无限循环的输入是21、2、4、8、16……的幂
要了解发生了什么,请在while循环中添加一个console.log调用
功能决策{
console.log'converting',y',to binary'
var res='1'
而y!=1{
res+=y%2
y=y/2
控制台。log'y是,y
//让我们在一段时间后抛出一个错误,以避免冻结计算机
如果y<0.001,则抛出无限循环
}
console.log'result is',res
}
这很好用
deci3//这最终会变成一个无限循环您可以做什么
将循环更改为do。。。while循环,因为它至少循环一次,对于零值
将res的分配切换为res=y%2+res;,因为它现在有正确的顺序
取下一个循环的除数的整数值
检查该值并继续使用非零值
功能决策{
var res=;
做{
res=y%2+res;
y=数学地板/2;
}而
返回res;
}
console.log deci0;
console.log deci1;
console.log deci2;
console.log deci3;
console.log deci4;
console.log deci5;
console.log deci13;请给我发一个看起来像无限循环的帖子。尝试将条件修改为y>=1编辑递归到loopYeah,这里有一个明显的无限循环,其中y不是2的幂。当我调用参数为y=3的函数deciy时,会发生这种情况,即deci3Infinite循环。只有当函数deci的输入必须是2 pow x,其中x>0,比如1,2,3时,它才能正常工作……这个答案不能解释任何事情!这是一个非常令人困惑的答案,介绍了海报不太可能理解且您没有解释的各种语法。它省略了一个重要信息,即正确答案是return y.toString2。@lonesomeday我喜欢你在承认自己无法理解提问者试图做什么后指出正确答案的方式,同时承认这个答案让你感到困惑。也许你需要花点时间阅读我认为问题不在于数字转换,而在于如何编写自己的循环;y、 toString2在这种情况下不会教给学习者任何东西,为什么不将其右移呢?通过使用带零的右移来获取整数,该数字已经转换为32位。@NinaScholz我保留了/2,因为它更显式,并且还保留了2作为变量的可能性-n>>1仅在这种特殊情况下有效。感谢您一如既往的评论:D@naomik我不在乎算法是否返回正确的结果。谁发布了这个问题,问他如何让它工作:我帮助他让它工作,现在让它按预期工作是他的责任。
var y;
function deci(y) {
var res = "";
while (y >= 1) {
res = res + y % 2;
y = y / 2;
}
return (1 + res);
}