Switch() 不适用于 Math.random() 数字

Vin*_*ent 0 javascript switch-statement

我正在尝试创建一个涉及 switch() 的函数,并为我提供特定的、随机生成的数字的答案。不知何故,我的函数没有运行它应该运行的情况。它只给我默认情况,无论数字是多少。

这是我的代码:

var i;
var girl;

function response() {
    var girl = prompt("What girl do you like?");
    var r = (Math.random() * (3 - 1 + 1) + 1).toFixed(0);
    var i = r;

    switch(i) {
        case (i == 1):
            alert(girl + " likes you as a friend.");
            break;

        case (i == 2):
            alert(girl + " does not really like you.");
            break;

        case (i == 3):
            alert(girl + " has a crush on you.");
            break;

        case (i == 4):
            alert(girl + " wants you to ask her out.");
            break;

        default:
            console.log(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

ale*_*lex 5

这不是开关的工作原理。它将每个值case与 进行比较switch

现在本质上,它是将多次的值i与布尔值(例如 的结果i == 1)进行比较。

此外,您的随机性不会像您那样通过将静态值的算术添加到值中而变得更加随机。您应该将其替换为4. 您还应该使用类似的东西Math.ceil()(因为您忽略了该0值,这也可能不是一个好主意),而不是toFixed()返回字符串。

您也不需要将值括起来的括号进行比较。如果您知道随机数的范围,您可能也不需要默认情况(因为您已经涵盖了所有可能性)。

也可以r直接使用,不需要重新赋值。

您的变量也是函数的本地变量,因此可能不需要它们在顶部。

这是我重写的方法:

function response() {
    var girl = prompt("What girl do you like?");
    var r = Math.floor(Math.random() * 4);

    switch(r) {
        case 0:
            alert(girl + " likes you as a friend.");
            break;

        case 1:
            alert(girl + " does not really like you.");
            break;

        case 2:
            alert(girl + " has a crush on you.");
            break;

        case 3:
            alert(girl + " wants you to ask her out.");
            break;

    }
}
Run Code Online (Sandbox Code Playgroud)

...甚至...

function response() {
    var answerSuffixes = [
        " likes you as a friend.",
        " does not really like you.",
        " has a crush on you.",
        " wants you to ask her out."
    ];
    var girl = prompt("What girl do you like?");
    var r = Math.floor(Math.random() * answerSuffixes.length);

    alert(girl + answerSuffixes[r]);
}
Run Code Online (Sandbox Code Playgroud)