#javascript
Вопрос:
function decideWinner() {
comChoice = generateComputerChoice();
userChoice = "Rock";
if (userChoice === comChoice) {
console.log("game drew");
} else {
if (userChoice === "Rock" amp;amp; comChoice === ("Scissor" || "Lizard")) {
console.log("you win")
} else if (userChoice === "Paper" amp;amp; comChoice === "Rock" || "Spock") {
console.log("you win")
} else if (userChoice === "Scissors" amp;amp; comChoice === "Paper" || "Lizard") {
console.log("you win")
} else if (userChoice === "Lizard" amp;amp; comChoice === "Spock" || "Paper") {
console.log("you win")
} else if (userChoice === "Spock" amp;amp; comChoice === "Scissor" || "Rock") {
console.log("you win")
} else {
console.log("you lose")
}
}
}
decideWinner()
Выбор создается из другой функции. Выбор пользователя установлен на «Рок», первая часть должна вернуть ничью, если обе одинаковые, а вторая возвращает выигрыш или проигрыш в зависимости от результата выбора. Но этого не происходит, я получаю ничью, если «Спок» нарисован компьютером, и победу при всех других обстоятельствах.
кто-нибудь может увидеть, что я сделал не так, пожалуйста
?
Комментарии:
1. См. логическое ИЛИ .
2. Вы можете использовать
(comChoice === 'Scissor" || commChoice === 'Lizard')
или['Scissor', 'Lizard'].includes(comChoice)
.
Ответ №1:
Проблема в том, как вы используете оператор OR ( ||
).
Использование val1 || val2
возвращает значение первого, которое является истинным. Таким образом, по сути ("Scissor" || "Lizard")
, каждый раз будут возвращаться «Ножницы». То , что вы вместо этого намерены сделать, — это фактически проверить равенство comChoice
, поэтому вам следует провести рефакторинг своего кода как такового:
if (userChoice === comChoice) {
console.log("game drew");
} else {
if (userChoice === "Rock" amp;amp; (comChoice === "Scissor" || comChoice === "Lizard")) {
console.log("you win")
} else if (userChoice === "Paper" amp;amp; (comChoice === "Rock" || comChoice === "Spock")) {
console.log("you win")
} else if (userChoice === "Scissors" amp;amp; (comChoice === "Paper" || comChoice === "Lizard")) {
console.log("you win")
} else if (userChoice === "Lizard" amp;amp; (comChoice === "Spock" || comChoice === "Paper")) {
console.log("you win")
} else if (userChoice === "Spock" amp;amp; (comChoice === "Scissor" || comChoice === "Rock")) {
console.log("you win")
} else {
console.log("you lose")
}
}
Ответ №2:
Одна проблема, которую я замечаю, связана с вашим оператором или оператором. Проверка comChoice === "Rock" || "Spock"
-это не то, чего вы ожидаете.
вместо этого вам нужно проверить это вот так: (comChoice === "Rock" || comChoice === "Spock")
С другой стороны, я бы просто использовал ==
вместо ===
этого в вашем случае, так как мы не можем видеть, какой тип данных передается, что может привести к ложным результатам.