第一个问题,我正在尝试做一个练习,如果给定的非负数是3或5的倍数,但不能同时取两者,则要求我返回true。例子有:
old35(3)→是
old35(10)→是
old35(15)→否
所以3是正确的,因为它是3的倍数,但是我目前无法使我的代码适用于所有实例。下面的代码;
public boolean old35(int n) {
if ((35 % n == 3) || (35 % n == 5))
return true;
return false;
}
我该如何编辑它以符合实践告诉我的标准?
>
最佳答案
我将详细解释。首先,使用余数符号检查余数为零的条件;
n % 3 == 0
和
n % 5 == 0
然后针对您的条件进行一对一翻译,将它们组合为:
((n % 3 == 0) || (n % 5 == 0)) // Multiple of 3 or 5
!((n % 3 == 0) && (n % 5 == 0)) // But not both
将它们添加(和)在一起;
public static boolean old35(int n) {
return(((n % 3 == 0) || (n % 5 == 0)) && !((n % 3 == 0) && (n % 5 == 0)));
}
但简单来说,您正在执行的是XOR(^)操作,以下代码有效且简单:
public static boolean old35(int n) {
return((n % 3 == 0) ^ (n % 5 == 0));
}