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;
}
但我想知道在第一次测试中我缺少了什么。我想把所有的测试都放在一个像,但就像我说我有一个脑屁并且无法弄清楚我错过了什么。
答案 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)) {
...
}
所以这段代码可以写得很短