Math.random继续回答相同的答案

时间:2015-03-16 01:44:35

标签: javascript

我对编码和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)
}

9 个答案:

答案 0 :(得分:5)

马上会想到一堆事情:

1。 JavaScript没有隐式返回

所以这不符合您的想法:

var randomizer = function() {
  Math.random() * 100
}

该函数返回undefined。你需要:

var randomizer = function() {
  return Math.random() * 100
}

2。在JavaScript函数调用

中,括号不是可选的

所以这个不符合你的想法:

if (randomizer <= 33) {
    var compDecision = "a"
}

你需要:

if (randomizer() <= 33) {
    var compDecision = "a"
}

3。 JavaScript没有三方比较

所以这不符合您的想法:

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)

您可以将代码简化为:

&#13;
&#13;
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;
&#13;
&#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