我正在上一门代码学院课程(找到here),但一直告诉我“当输入是纸质和摇滚时,您的代码返回的是“岩胜”,而不是“纸胜””,为什么呢?应该是正确的。因为它在谈论“摇滚胜利”,所以它在谈论摇滚与剪刀。那么,为什么在“摇滚胜利”的唯一结果中根本没有涉及纸张的情况下,为什么说“代替纸面胜利”呢?

var compare = function (choice1, choice2) {

    if (choice1 === choice2) {
        return("The result is a tie!");
    }

    if (choice1 === "rock") {
        if (choice2 === "scissors");
    } else {
        return ("rock wins");
    }

    if (choice1 === "paper") {
        if (choice2 === "rock");
    } else {
        return ("paper wins");
    }

    if (choice1 === "paper") {
        if (choice2 === "scissors");
    } else {
        return ("scissors wins");
    }

};

最佳答案

看你的第一个条件:

if (choice1 === "rock") {
    if (choice2 === "scissors");
} else {
    return ("rock wins");
}


因此,如果choice1是石头,则输入if块(实际上不返回任何内容,但是由于在这种情况下choice1实际上是"paper",因此进入else块,这是无条件的返回"rock wins"。尝试将其重构为如下形式:

if (choice1 === choice2) {
    return("The result is a tie!");
}

if (choice1 === "rock") {
    if (choice2 === "scissors") {
        return ("rock wins");
    } else {
        return ("paper wins");
    }
}

if (choice1 === "paper") {
    if (choice2 === "rock") {
        return ("paper wins");
    } else {
        return ("scissors wins");
    }
}

if (choice1 === "paper") {
    if (choice2 === "scissors") {
        return ("scissors wins");
    } else {
        return ("rock wins");
    }
}


但是,让我们开始幻想吧。尝试将选择放入数组中:

var choices = ["rock", "paper", "scissors"];


现在,请注意,右边的项目总是比左边的项目好(如果我们认为数组会环绕)。我们如何使用它来简化代码?好了,我们可以比较每个选择的索引,注意处理剪刀和岩石的边缘情况:

var x = choices.indexOf(choice1),
    y = choices.indexOf(choice2);
if (x === y) {
    return("The result is a tie!");
} else if (x > y) {
    if (x == 3 && y == 0) {
        return choice2 + " wins";
    } else {
        return choice1 + " wins";
    }
} else {
    return choice2 + " wins";
}


但是我们可以在这里使用remainder operator%)来更容易地处理边缘情况:

var choices = ["rock", "paper", "scissors"];
var compare = function (choice1, choice2) {
    var x = choices.indexOf(choice1),
        y = choices.indexOf(choice2);
    if (x === y) {
        return("The result is a tie!");
    }

    return (((x - y) % 3) > 0 ? choice1 : choice2) + " wins";
}

关于javascript - JavaScript中的石头,纸,剪刀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20961119/

10-11 04:19