第一个问题,我正在尝试做一个练习,如果给定的非负数是3或5的倍数,我会被要求返回true,但不是两者都有。例子是;
old35(3)→true
old35(10)→true
old35(15)→false
所以3会是真的,因为它是3的倍数,但我目前无法让我的代码适用于所有实例。以下代码;
public boolean old35(int n) {
if ((35 % n == 3) || (35 % n == 5))
return true;
return false;
}
我怎么能编辑它以符合练习告诉我要做的标准? >
答案 0 :(得分:0)
您可以使用条件的逻辑异或。基本上你可以做C1 ^ C2
。
编辑:要检查3个中的多个是否必须检查n % 3 == 0
,对于5的倍数检查相同。
答案 1 :(得分:0)
我会详细解释一下。首先,使用余数符号检查余数为零的条件;
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));
}