为什么 Math.floor(Math.random()) 函数总是 return “0”?
Why does Math.floor(Math.random()) function always return "0"?
我正在编写一个程序,在 0
和 1
之间选择一个随机数,然后进入 while 循环,直到随机数生成器 select 的值大于 .5
.每次我 运行 程序,程序 returns 0
并无限循环直到它崩溃。为什么会这样?不应该 Math.floor(Math.random())
最终 select 比 .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());
}
有几个原因:
Math.floor(Math.random())
将始终为零,因此循环永远不会开始。 Math.random()
将给出一个介于 0 和 1 之间的数字,而你正在为那个数字取底,这意味着你总是向下舍入,这意味着零。
- 想要while停止,最好
break;
在条件合适的时候
此代码有效:
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
。
这一行几乎总是 return 0,这就是它不进入 while 的原因。
var randomNumber = Math.floor(Math.random());
Math.random() return 从 0 开始小于 1 的浮点值 ... 并且使用 Math.floor 你得到的 int 部分确实是 0
您的变量 randomNumber 已经用您的第一行进行了初始化,要更改它的值,只需使用 randomNumber = newValue
,其中 newValue
是您希望使用方法或硬编码值将其设置为的值。您不需要再次使用 var
关键字。
同时在 Math.random
上使用 Math.floor
方法将始终 return 0,因为 Math.random 将 return 一个介于 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;
}
}
只是为了澄清一下正则表达式:他们本质上是寻找单词的不同形式,有大写或没有,标点符号或没有代表完整的单词(^ 是字符串的开头,$ 是字符串的结尾细绳)。那应该可以省去你很多麻烦。
哦,对于真正的开发实践,尽量避免 while(true)
。 for(var i=0;i<2e7;i++)
或类似的东西是更好的做法,但我认为如果它只是用于命令行,那应该没问题。
您的 while 循环永远不会 运行。
Math.random() returns 数字 n 其中 0 <= n <1
Math.floor(n) returns n 向零四舍五入。
所以你的变量 randomNumber 将始终等于零。
您还可以将 if 语句替换为要检查的值数组。
然后在该数组中查找名称的索引。
如果索引为 -1,则它不存在,否则记录“干得好!”
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();
}
我正在编写一个程序,在 0
和 1
之间选择一个随机数,然后进入 while 循环,直到随机数生成器 select 的值大于 .5
.每次我 运行 程序,程序 returns 0
并无限循环直到它崩溃。为什么会这样?不应该 Math.floor(Math.random())
最终 select 比 .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());
}
有几个原因:
Math.floor(Math.random())
将始终为零,因此循环永远不会开始。Math.random()
将给出一个介于 0 和 1 之间的数字,而你正在为那个数字取底,这意味着你总是向下舍入,这意味着零。- 想要while停止,最好
break;
在条件合适的时候
此代码有效:
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
。
这一行几乎总是 return 0,这就是它不进入 while 的原因。
var randomNumber = Math.floor(Math.random());
Math.random() return 从 0 开始小于 1 的浮点值 ... 并且使用 Math.floor 你得到的 int 部分确实是 0
您的变量 randomNumber 已经用您的第一行进行了初始化,要更改它的值,只需使用 randomNumber = newValue
,其中 newValue
是您希望使用方法或硬编码值将其设置为的值。您不需要再次使用 var
关键字。
同时在 Math.random
上使用 Math.floor
方法将始终 return 0,因为 Math.random 将 return 一个介于 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;
}
}
只是为了澄清一下正则表达式:他们本质上是寻找单词的不同形式,有大写或没有,标点符号或没有代表完整的单词(^ 是字符串的开头,$ 是字符串的结尾细绳)。那应该可以省去你很多麻烦。
哦,对于真正的开发实践,尽量避免 while(true)
。 for(var i=0;i<2e7;i++)
或类似的东西是更好的做法,但我认为如果它只是用于命令行,那应该没问题。
您的 while 循环永远不会 运行。
Math.random() returns 数字 n 其中 0 <= n <1
Math.floor(n) returns n 向零四舍五入。
所以你的变量 randomNumber 将始终等于零。
您还可以将 if 语句替换为要检查的值数组。
然后在该数组中查找名称的索引。
如果索引为 -1,则它不存在,否则记录“干得好!”
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();
}