javascript - If/Else/Switch 返回错误结果

标签 javascript reactjs if-statement switch-statement conditional-statements

我正在使用 ReactJS 制作石头剪刀布蜥蜴史波克(《生活大爆炸》,电视节目),但我面临着某种抽象问题。

switch (this.state.playerOnePick === 'Rock') {
    case((this.state.playerTwoPick === 'Scissors') || (this.state.playerTwoPick === 'Lizard')):
    return (
        <div>
            <h1>Player One wins !</h1>
            <h2>P1: {this.state.playerOnePick} P2: {this.state.playerTwoPick}</h2>
        </div>
    );
        break;
    case((this.state.playerTwoPick === 'Paper') || (this.state.playerTwoPick === 'Spock')):
        return (
            <div>
                <h1>Player Two wins !</h1>
                <h2>P1: {this.state.playerOnePick}
                    P2: {this.state.playerTwoPick}</h2>
            </div>
        );
        break;

}

switch (this.state.playerOnePick === 'Lizard') {
    case((this.state.playerTwoPick === 'Spock') || (this.state.playerTwoPick === 'Paper')):
        return (
            <div>
                <h1>Player One wins !</h1>
                <h2>P1: {this.state.playerOnePick} P2: {this.state.playerTwoPick}</h2>
            </div>

        );
        break;
    case((this.state.playerTwoPick === 'Scissors') || (this.state.playerTwoPick === 'Rock')):
        return (
            <div>
                <h1>Player Two wins !</h1>
                <h2>P1: {this.state.playerOnePick} P2: {this.state.playerTwoPick}</h2>
            </div>
        );
        break;

}

无论谁选,石头VS纸都会返回正确的结果,当P1:石头,P2:蜥蜴时,P1按预期获胜,但当P1:蜥蜴P2:石头时,返回P1获胜..

What it returns me when P1:Lizard P2:Rock

蜥蜴队在与摇滚队的比赛中没有任何地方可以获胜......

(当玩家选择武器时,playerOnePick 和playerTwoPick 会正确更新)

最佳答案

switch 语句的正确用法是

switch (this.state.playerOnePick) {
    case 'Rock':
        switch (this.state.playerTwoPick) {
            case 'Scissors'):
            case 'Lizard':
                return "Player One wins!";
                break; // unnecessary after `return` but well
            case 'Paper':
            case 'Spock':
                return "Player Two wins!";
                break; // as above
        }
        break;
    case 'Lizard':
        switch (this.state.playerTwoPick) {
            case 'Spock':
            case 'Paper':
                return "Player One wins!"
            case 'Scissors':
            case 'Rock':
                return "Player Two wins!";
        }
        break;
}

您所展示的是 if/else 的布局,其中包含许多 bool 条件:

if (this.state.playerOnePick === 'Rock') {
    if ((this.state.playerTwoPick === 'Scissors') || (this.state.playerTwoPick === 'Lizard')) {
        return "Player One wins!";
    } else if ((this.state.playerTwoPick === 'Paper') || (this.state.playerTwoPick === 'Spock')) {
        return "Player Two wins!";
    }
} else if (this.state.playerOnePick === 'Lizard') {
    if ((this.state.playerTwoPick === 'Spock') || (this.state.playerTwoPick === 'Paper')) {
        return "Player One wins!";
    } else if ((this.state.playerTwoPick === 'Scissors') || (this.state.playerTwoPick === 'Rock')) {
        return "Player Two wins!";
    }
}

然而,实现石头剪刀布蜥蜴史波克的真正问题是所有的重复(这留下了很大的出错空间)。实际的编程任务是找出如何减少它。
提示:为每个可能的选择分配一个整数,并进行一些数学运算。
编写一个单独的函数 winner(pick1, pick2),当第一个玩家获胜时返回 -1,平局时返回 0,而 1 当第二个玩家获胜时。然后只需从与 UI 相关的 ReactJS 代码中调用它即可。

关于javascript - If/Else/Switch 返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520994/

相关文章:

javascript - EAI Content Enricher 的数据获取模式

javascript - 确定变量传递给函数后的原始名称

javascript - 如何在Firestore中不断地将对象添加到嵌套集合中

javascript - React - 在 &lt;input type ="file"> 上手动触发 onChange 事件

c++ - 使用 If 语句处理 boolean 值

javascript - 在按钮单击 React 上渲染一个额外的弹出对话框

javascript - 我可以确定网页上元素的实际宽度/高度吗?

reactjs - useRef TypeScript - 不可分配给类型 LegacyRef<HTMLDivElement>

计数器值在 while 循环内的 if else 条件下仅递增一次

SQL Server : check if variable is Empty or NULL for WHERE clause