我被这个练习卡住了。我不明白为什么他们需要有第一个条件。我可以忽略那部分吗?
练习来自 https://www.w3resource.com/javascript-exercises/javascript-basic-exercise-46.php :
Write a JavaScript program to check two given non-negative integers that whether one of the number (not both) is multiple of 7 or 11.
function valCheck(a, b) {
if (!((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0))) {
return ((a % 7 == 0 || a % 11 == 0) || (b % 7 == 0 || b % 11 == 0));
} else
return false;
}
console.log(valCheck(14, 21));
console.log(valCheck(14, 20));
console.log(valCheck(16, 20));
最佳答案
TL;DR – 不,这不是多余的!
Write a JavaScript program to check whether exactly one of the two given non-negative integer numbers is a multiple of 7 or 11.
为了解释为什么它不是多余的,让我们分解这个解决方案功能。
function valCheck(a, b) {
if (!((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0))) {
return ((a % 7 == 0 || a % 11 == 0) || (b % 7 == 0 || b % 11 == 0));
} else
return false;
}
第一个条件第一个条件是
!((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0))
. x % n == 0
表达式正在检查是否给定 x
可以被 7 或 11 的(倍数)整除,但表达式写得过于冗长,有点难以理解。使用 De Morgan's law ,我们可以重写它:
!((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0))
⇔
!(a % 7 == 0 || a % 11 == 0) || !(b % 7 == 0 || b % 11 == 0)
⇔
(a % 7 != 0 && a % 11 != 0) || (b % 7 != 0 && b % 11 != 0)
现在,我们可以看出这个条件正在检查 a
的情况。或 b
不能被 7 或 11 整除。当这个条件为真时,我们返回第二个条件的结果。如果它是假的,那么我们知道输入不是 7 或 11 的倍数,所以我们直接返回假。
第二个条件
第二个条件是:
(a % 7 == 0 || a % 11 == 0) || (b % 7 == 0 || b % 11 == 0)
这个比第一个更不透明,并检查 4 个子条件中的任何一个是否为真(括号在这里无关紧要,因为它们都是“或”||
运算符)。由于我们已经从第一个条件中知道至少有一个输入不是 7 或 11 的倍数,所以我们现在可以简单地返回是否至少有输入是。换句话说,如果我们知道第二个条件为真,那么我们可以确定其中一个数字是 7 或 11 的倍数。
条件是否冗余?
所以回答你的问题,不,第一个条件不是多余的 ,因为它会检查是否至少有一个输入不是倍数或 7 或 11。我们需要两个条件表达式来正确检查输入之一是否是正确的倍数或 7 或 11。
如果“but not both”子句不存在,那么我们可以只使用第二个条件表达式,但既然是这样,我们就需要两条信息。
需要注意的是,我说我们需要两个表达式时撒了一点谎,因为确实可以用一个表达式来解决这个练习!
function valCheck(a, b) {
return (a % 7 == 0 || a % 11 == 0) != (b % 7 == 0 || b % 11 == 0);
}
console.log(valCheck(14, 21)); // false
console.log(valCheck(14, 20)); // true
console.log(valCheck(16, 20)); // false
我会把它留给读者去弄清楚为什么会这样!
关于javascript - 检查一个数的可整性的基本练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67994114/