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

时间:2015-07-11 01:54:35

标签: javascript if-statement random while-loop infinite-loop

我正在编写一个程序,在01之间选择一个随机数,然后进入while循环,直到随机数生成器选择的值大于.5。每次运行程序时,程序都会返回0并无限循环直到它崩溃。为什么会这样? Math.floor(Math.random())最终不应选择高于.5的数字吗?

var randomNumber = Math.floor(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!");
} else if(name === "No.") {
    console.log("Go away!!!!!");
 else {
    console.log("I have no idea");
}

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

5 个答案:

答案 0 :(得分:1)

有几个原因:

  • 'Math.floor(Math.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(); }

但现在它不仅取决于循环是否会继续,而且还取决于randomNumber!

答案 1 :(得分:1)

这条线几乎总是返回0,这就是为什么它不会进入的时候。

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

Math.random()从0开始返回小于1的浮点值...而使用Math.floor得到的int部分确实是0

答案 2 :(得分:1)

您的变量randomNumber已经使用您的第一行初始化,要更改它的值,只需使用randomNumber = newValue,其中newValue是您希望将其设置为的值,使用方法或硬编码值。您无需再次使用var关键字。

同样在Math.floor上使用Math.random方法将始终返回0,因为Math.random将返回0到1之间的数字,该数字将降至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.

答案 3 :(得分:1)

你的while循环永远不会运行。
Math.random()返回一个数字n,其中0 <= n <1 Math.floor(n)将n舍入为零。

所以你的变量randomNumber总是等于零。

您还可以使用要检查的值数组替换if语句 然后在该数组中查找name的索引 如果索引为-1则不存在,否则请记录“Good Jorb!”

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

答案 4 :(得分:0)

试试这个:(对不起,如果我在长期咒骂中弄错了任何错误......那里有很多......)

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

只是为了澄清正则表达式:它们基本上是用大写或不用和标点符号来查找单词的不同形式,或者不代表完整的单词(^是字符串的开头,$是字符串的结尾) 。这应该可以为你节省很多麻烦。

哦,并尝试避免while(true)进行真正的开发实践。 for(var i=0;i<2e7;i++)或类似的东西是一种更好的做法,但我认为如果只是命令行,那应该没问题。