Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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 为什么Math.floor(Math.random())函数总是返回“0”?_Javascript_If Statement_Random_While Loop_Infinite Loop - Fatal编程技术网

Javascript 为什么Math.floor(Math.random())函数总是返回“0”?

Javascript 为什么Math.floor(Math.random())函数总是返回“0”?,javascript,if-statement,random,while-loop,infinite-loop,Javascript,If Statement,Random,While Loop,Infinite Loop,我正在编写一个程序,它选择一个介于0和1之间的随机数,然后进入while循环,直到随机数生成器选择一个大于0.5的值。每次我运行程序时,程序返回0并无限循环,直到崩溃。为什么会发生这种情况?Math.floorMath.random最终不应该选择一个大于.5的数字吗 有几个原因: “Math.floorMath.random”将始终为零,因此循环将永远不会启动。Math.random将给出一个介于0和1之间的数字,您将得到这个数字,这意味着您总是向下舍入,这意味着零。 如果你想让这段时间停止,最

我正在编写一个程序,它选择一个介于0和1之间的随机数,然后进入while循环,直到随机数生成器选择一个大于0.5的值。每次我运行程序时,程序返回0并无限循环,直到崩溃。为什么会发生这种情况?Math.floorMath.random最终不应该选择一个大于.5的数字吗


有几个原因:

“Math.floorMath.random”将始终为零,因此循环将永远不会启动。Math.random将给出一个介于0和1之间的数字,您将得到这个数字,这意味着您总是向下舍入,这意味着零。 如果你想让这段时间停止,最好是“休息”当条件合适时。 此代码将在以下情况下工作:

var randomNumber = Math.random();
while(randomNumber > .5) {
var name = prompt("Do you want to play a game? Like checkers or something?");
if (name === "Yes") {
    console.log("Good jorb!"); break;
} else if(name === "Nope.") {
    console.log("Okay that is fine.");
} else {
console.log("I don't know, man. I don't know");
}
randomNumber = Math.random(); }

但现在,这不仅取决于循环是否会继续,还取决于随机数

这一行几乎总是返回0,这就是为什么它不进入while

var randomNumber = Math.floor(Math.random());

Math.random返回从0开始小于1的浮点值。。。对于Math.floor,您得到的int部分实际上是0,您的变量randomNumber已经用第一行初始化,要更改它的值,只需使用randomNumber=newValue,其中newValue是您希望设置的值,使用方法或硬编码值。您不需要再次使用var关键字

另外,在Math.random上使用Math.floor方法将始终返回0,因为Math.random将返回一个介于0和1之间的数字,这将使floor变为0

您缺少while循环的结束括号

我对代码进行了一些清理,以链接if布尔运算符,尽管有更好的方法来构造此代码

var randomNumber = Math(Math.random());
while(randomNumber > .5) {
    var name = prompt("Do you want to play a game? Like checkers or something?");
    if (name === "Yes" || name === "yes" || name === "Yes." || name === "yes." || name === "Yup" || name === "Yup." || name ===  "yup." || name === "yup")
    {
        console.log("Good jorb!");
    }

    else if(name === "No." || name === "No" || name === "no" || name === "no." || name === "nope" || name === "nope." || name ===  "Nope" || name === "Nope.")
    {
        console.log("That's too bad.");
    }
    else 
    {
        console.log("I don't know, man. I don't know");
    }
    randomNumber = Math(Math.random());
};// Close your while loop.

试试这个:抱歉,如果我在长咒骂中有任何计数错误。。。他们中有很多人

while(true){
    var name=prompt("Do you want to play a game? Like checkers or something?");
    if(name.search(/^[yY](es|up)\.?$/)!=-1){
        console.log('Good jorb!');
    }else if(name.search(/^[nN]o(pe)?\.?$/)!=-1){
        console.log('F'+'U'.repeat(12)+'C'.repeat(13)+'K'.repeat(9)+' Y'+'O'.repeat(11)+'U'.repeat(18)+'!'.repeat(12));
    }else{
        console.log("I don't know, man. I don't know");
    }
    if(condition){
        break;
    }
}
只是想澄清一下正则表达式:它们本质上是寻找大写或不大写的单词的不同形式,标点符号或不表示完整单词。^是字符串的开头,$是字符串的结尾。那会给你省去很多麻烦


哦,尽量避免真正的开发实践。forvar i=0;我你的while循环永远不会运行。
Math.random返回一个数字n,其中0我建议如果你想让你的帖子被认真对待,不要无缘无故地使用诅咒词。。。应该是randomNumber=…我有点困惑于您试图实现的总体目标。但是,我可以告诉您,while循环永远不会像编写的那样运行。floor将一个数字降到最接近的整数。Math.random返回一个介于0和1之间的数字,不包括1。这意味着Math.floorMath.random将始终为0,因此在循环中执行任何操作所需的值都不会超过0.5。如果要测试大小写的不同组合,如果name.toUpperCase=='YES',为什么不测试呢?如果您想允许一个可选的句号,那么可能需要一个不区分大小写的正则表达式:If/^yes | yup\?$/i.testname-单个If测试将取代您的所有测试…我正在尝试使它成为一个循环,以便确认提示将随机循环,直到math.random根据规范在0到1的范围内选择一个大于.5的数字,可以返回0但从不返回1。你说得对!我修复了它,在写这篇文章的时候,在其他地方用C代码写了它,非常抱歉和感谢你抓到了它。还有很多更好的方法可以使用regex/array等。正如上面所发布的,只是用它来保持原始海报更容易理解的格式。是的,是的,你根本不需要为自己辩护,特别是在你立即纠正它之后。我将删除我以前的评论。
while(true){
    var name=prompt("Do you want to play a game? Like checkers or something?");
    if(name.search(/^[yY](es|up)\.?$/)!=-1){
        console.log('Good jorb!');
    }else if(name.search(/^[nN]o(pe)?\.?$/)!=-1){
        console.log('F'+'U'.repeat(12)+'C'.repeat(13)+'K'.repeat(9)+' Y'+'O'.repeat(11)+'U'.repeat(18)+'!'.repeat(12));
    }else{
        console.log("I don't know, man. I don't know");
    }
    if(condition){
        break;
    }
}
var randomNumber = Math.random();  
while(randomNumber > .5) {
  var name = prompt("Do you want to play a game? Like checkers or something?");
  var yesArray = ["Yes", "yes", "Yes.", "yes.", "Yup", "Yup.", "yup.", "yup"];
  if(yesArray.indexOf(name) == -1) {
    console.log("I don't know, man. I don't know");
  else {
    console.log("Good jorb!");
  } 
  randomNumber = Math.random();
}