我正在编写一个程序,在0
和1
之间选择一个随机数,然后进入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());
}
答案 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++)
或类似的东西是一种更好的做法,但我认为如果只是命令行,那应该没问题。