为什么这个if语句有效,但另一个解决方案却没有?

时间:2018-05-29 15:39:08

标签: javascript if-statement

我正在为骰子游戏做这个,如果掷骰子是1或者连续两次掷骰子,则切换玩家。我的朋友代码工作但我的代码没有,看起来我的if语句完成了同样的事情。

此代码有效(朋友代码):

if (dice === 1 || diceTwo === 1) {
    nextPlayer();
} else if (doubleSix === 6) {
    if (dice === 6 || diceTwo === 6) {
        roundScore = 0;
        score[activePlayer] = 0;
        nextPlayer();
    }
} else {
    roundScore += (dice + diceTwo);
    document.querySelector('#current-' + activePlayer).textContent = roundScore;
    doubleSix = dice;
}

此代码不是(我的代码):

if (dice !== 1 || diceTwo !== 1) {
    //Add score
    if (doubleSix === 6 && dice === 6) {
        roundScore = 0;
        score = 0;
        nextPlayer();
    } else if {
        roundScore += (dice + diceTwo) ;
        document.querySelector('#current-' + activePlayer).textContent = roundScore;
        doubleSix = dice;
    }
    } else {
    //Next Player
    nextPlayer();
}

4 个答案:

答案 0 :(得分:3)

首先,您的朋友代码只需要一个骰子为1.您需要两个骰子为1才能运行nextPlayer

这是因为所谓的De Morgan's laws

您的代码应该

if (dice !== 1 && diceTwo !== 1) {

建议的改进..

作为一般规则,调用类似性质的项目dicediceTwo等是一个坏主意。拥有dice数组要好得多,就好像你一样增加骰子的数量,代码仍然无需修改即可使用。

另外,我不确定你为什么只在前一轮的第一个骰子中寻找六个,加上本轮的任何骰子。我原本以为你在上一轮中找到任意六个,本轮中任意六个......

你的朋友代码会更好......

var foundSix = false;

// method to sum array
function sum(total, num) {
   return total + num;
}

// ... more code

// check for a 1...
if (dice.indexOf(1) >= 0) {
    nextPlayer();
} else if (foundSix) {
    // check for a 6
    if (dice.indexOf(6) >= 0) {
        roundScore = 0;
        score[activePlayer] = 0;
        nextPlayer();
    }
} else {
    // roundScore += (dice[0] + dice[1]);
    // use array reduce here...
    roundScore = dice.reduce( sum, roundScore);
    document.querySelector('#current-' + activePlayer).textContent = roundScore;
    // doubleSix = dice[0];
    // check ALL dice for a six..
    foundSix = (dice.indexOf(6) >= 0);
}

答案 1 :(得分:1)

阅读De Morgan's ruledice === 1 || diceTwo === 1的否定不是dice !== 1 || diceTwo !== 1,而是dice !== 1 && diceTwo !== 1

用语言:“其中一个骰子是1”的反面不是“其中一个骰子不是1”,而是“两个骰子都不是1”。

答案 2 :(得分:0)

你的if语句没有做同样的事情。

你朋友的代码:

if (dice === 1 || diceTwo === 1) {
    // dice is 1, or diceTwo is 1.
} else { 
    // neither dice nor diceTwo is 1.
}

您的代码:

if (dice !== 1 || diceTwo !== 1) {
    // dice is not 1, or dice2 is not 1.  In other words this will match all cases except snake eyes.
} else {
    // both dice and diceTwo === 1
}

答案 3 :(得分:0)

快速浏览一下,但不应该这样:(骰子!== 1 || diceTwo!== 1)改为AND这样:(骰子!== 1&& diceTwo! == 1)因为你正在检查一个骰子和骰子都没有掷过一个?