我对编码和javascript仍然很陌生,但我将下面的代码编写为三向随机函数。一切似乎都运行良好,除了无论我运行多少次代码,返回都是插入的“c”。我想知道是否有人可以给我一些关于如何解决这个问题的快速建议。感谢。
var random = function() {
var randomizer = function() {
Math.random() * 100
}
if (randomizer <= 33) {
var compDecision = "a"
}
else if (randomizer > 67) {
var compDecision = "b"
}
else if (33 < randomizer <= 67) {
var compDecision = "c"
}
document.write(compDecision)
}
答案 0 :(得分:5)
马上会想到一堆事情:
所以这不符合您的想法:
var randomizer = function() {
Math.random() * 100
}
该函数返回undefined
。你需要:
var randomizer = function() {
return Math.random() * 100
}
所以这个也不符合你的想法:
if (randomizer <= 33) {
var compDecision = "a"
}
你需要:
if (randomizer() <= 33) {
var compDecision = "a"
}
所以这不符合您的想法:
else if (33 < randomizer <= 67)
你需要:
else if (33 < randomizer() && randomizer() <= 67)
最后,正如其他人所提到的,将randomizer
定义为函数实际上首先没有意义。要让random
函数执行您想要的操作(以大致相等的概率生成'a'
,'b'
或'c'
),您真的希望在此处生成单个随机值启动函数并重用它:
function random() {
var randomizer = Math.random() * 100;
if (randomizer <= 33) {
return 'a';
} else if (randomizer <= 67) {
return 'b';
} else {
return 'c';
}
}
console.log(random());
希望这有帮助。
答案 1 :(得分:1)
您没有正确调用randomizer
函数。我删除了它,因为在这种情况下它并非真正必要:
var random = function() {
// I assume you want the comparisons below to be run against the same number
var randomNumber = Math.random() * 100;
if (randomNumber <= 33) {
var compDecision = "a";
}
else if (randomNumber > 67) {
var compDecision = "b"
}
else {
var compDecision = "c"
}
return compDecision;
}
答案 2 :(得分:1)
您可以将代码简化为:
var randomizer = Math.random() * 100;
if (randomizer <= 33) {
var compDecision = "a";
} else if (randomizer > 67) {
var compDecision = "b";
} else if (33 < randomizer && randomizer <= 67) {
var compDecision = "c";
}
alert(compDecision);
&#13;
答案 3 :(得分:1)
Dan Tao的答案很棒,另外对于只调用一次的单行函数似乎没有任何意义,所以:
var n = Math.random() * 100;
但是, document.write 部分可能应该是分开的,因为您可能希望以总是将结果写入当前文档的方式调用此函数。
最后,你只需要测试三个条件中的两个,因为如果它不是前两个条件中的任何一条,它必须是第三个条件。您可以使用条件运算符:
function random() {
var n = Math.random() * 100;
return n <= 33? 'a' : n <= 67? 'c' : 'b';
}
document.write(random());
答案 4 :(得分:0)
randomizer是一个持有函数的变量。
要了解此问题,请尝试
警报(的Math.random());
var value = randomizer(); 警报(值);
答案 5 :(得分:0)
我想,你可以这样做:
function Randomize(){
rng = Math.random() * 3;
rng = Math.round(rng);
switch(rng) {
case 0:
return "a"
break;
case 3:
return "a"
break;
case 1:
return "b"
break;
case 2:
return "c"
break;
};
};
alert(Randomize());
答案 6 :(得分:0)
JavaScript在每个语句后都需要一个分号。但是,如果/ then / else不应该跟分号后面。
if (a < 10) {
alert("Less than ten.");
} else {
alert("Ten or more.");
}
有时分号会自动插入到它们所属的位置,但您不应该依赖它 - 最好自己输入分号。
答案 7 :(得分:0)
关键字var
用于创建/声明/初始化变量。每个变量只执行一次。
最好在包含它的函数顶部声明一个变量。
function() {
var result;
if (condition1 === true) {
result = "a";
} else if (condition2 === true) {
result = "b"
} else {
result = "c"
}
return result;
}
答案 8 :(得分:0)
在您的代码中,&#34;随机数发生器&#34;是一个功能。要执行它并获得它返回的值,您必须在其后面加上一对括号:randomizer()
所以randomizer <= 33
并不是在比较两个数字,而是将一个函数与一个数字进行比较。与randomizer > 67
同样如此。因此,每个评估结果为false
。
然后,33 < randomizer <= 67
评估为true
。为什么?我不确定。但由于它被认为是&#34; true&#34;,var compDecision = "c"
被执行。
这就是为什么你不断获得&#34; c&#34;。
编辑:RobG的评论解释了为什么33 < randomizer <= 67
在JavaScript中评估为true
。