JavaScript if语句测试一个或另一个但不是两个

时间:2012-04-04 14:32:35

标签: javascript if-statement

Hello StackOverflowers大家好。我现在有一个脑屁,我似乎无法解决这个问题。

我有以下代码

if ((n % 3 === 0 || n % 5 === 0) &&( n % 3 !== 0 && n % 5 !== 0))
    {
        return true;
}
else {
    return false;
}

基本上我需要测试数字是否为3 ||的倍数5但不是两者的倍数。

但是当我输入我输入的任何数字时(无论它是3 || 5 ||的倍数),测试总是失败。我原本以为这可以在一个声明中完成。

此代码虽然可以正常工作。

if (n % 3 === 0 || n % 5 === 0)
{
    if( n % 3 === 0 && n % 5 === 0)
    {
        return false;
    }
    else {
       return true;
    }
}
else {
    return false;
}

但我想知道在第一次测试中我缺少了什么。我想把所有的测试都放在一个像,但就像我说我有一个脑屁并且无法弄清楚我错过了什么。

7 个答案:

答案 0 :(得分:9)

您可以使用XOR运算符

return  (n % 3 === 0 ^ n % 5 === 0);

答案 1 :(得分:7)

如果它可以被3和5整除,它将被15整除。

请尝试以下条件

if ((n % 3 === 0 || n % 5 === 0) && ( n % 15 !== 0))

答案 2 :(得分:3)

更改

if ((n % 3 === 0 || n % 5 === 0) &&( n % 3 !== 0 && n % 5 !== 0))

if ((n % 3 === 0 || n % 5 === 0) && !(n % 3 === 0 && n % 5 === 0))

你的逻辑的第一部分是确定所讨论的数字是3或5的倍数,而第二部分应该只是其中一个是。所以......我改变了第二部分,看看两者是否匹配,然后我就没有了。

答案 3 :(得分:2)

应该是:if ((n % 3 === 0 || n % 5 === 0) &&( n % 3 !== 0 || n % 5 !== 0))

答案 4 :(得分:1)

return (n % 3 === 0  && !(n % 5 === 0)) || (n % 5 === 0  && !(n % 3 === 0));

(未测试的)

答案 5 :(得分:1)

你的第二次检查错了:

if ((n % 3 === 0 || n % 5 === 0) &&**( n % 3 !== 0 && n % 5 !== 0)**)

将其更改为:

(! (n%3 === 0 && n % 5 === 0 ) )

答案 6 :(得分:1)

这是使用javascript中的条件语句

XOR实现的简短版本
if((n % 3 === 0)? (n % 5 !== 0) : (n % 5 === 0)) {
  ...
}

或者您也可以这样比较,检查两个条件何时被评估为布尔值,返回不同的值(一个为真,另一个为假,反之亦然)

if( (n % 3 === 0) !==  (n % 5 === 0)) {
  ...
}

所以这段代码可以写得很短