JavaScriptif语句测试一个或另一个,但不能同时测试两者

JavaScript if statement test for one or the other but not both

本文关键字:测试 但不能 另一个 一个 语句 JavaScriptif      更新时间:2023-09-26

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

但我想知道我在第一次测试中遗漏了什么。我希望所有的测试都在一个类似的测试中,但就像我说的那样,我脑子里有个屁,不知道我错过了什么。

您可以使用XOR运算符,或者

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

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

请尝试以下条件

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

更改

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的倍数,而第二部分应该是关于它们中是否只有一个是。所以……我改变了第二部分,看看两者是否匹配,然后我就没有了。

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

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

(未经测试)

您的第二次检查错误:

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

更改为:

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

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

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

或者你也可以用这种方式进行比较,检查当两个条件被评估为布尔值时,何时返回不同的值(一个为真,另一个为假,反之亦然)

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

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

相关文章: