3

你好 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;
}

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

4

7 回答 7

9

您也可以使用 XOR 运算符

return  (n % 3 === 0 ^ n % 5 === 0);
于 2012-04-04T14:37:02.643 回答
7

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

请尝试以下条件

if ((n % 3 === 0 || n % 5 === 0) && ( n % 15 !== 0))
于 2012-04-04T14:36:01.120 回答
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 的倍数,而第二部分应该是关于是否只有其中一个。所以...我更改了第二部分以查看两者是否匹配,然后我没有这样做。

于 2012-04-04T14:37:08.410 回答
2

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

于 2012-04-04T14:35:22.377 回答
1
return (n % 3 === 0  && !(n % 5 === 0)) || (n % 5 === 0  && !(n % 3 === 0));

(未经测试)

于 2012-04-04T14:35:40.177 回答
1

您的第二次检查是错误的:

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

将其更改为:

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

于 2012-04-04T14:35:40.613 回答
1

XOR这是在 javascript 中使用条件语句实现的简短版本

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

或者您也可以通过这种方式进行比较,检查两个条件何时返回不同的值(一个为真,另一个为假,反之亦然)

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

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

于 2012-04-04T14:37:17.353 回答