简单的编程实践(使用模运算)
Simple programming practice (using modulus op)
第一个问题,我正在尝试做一个练习,如果给定的非负数是 3 或 5 的倍数,但不是两者,我被要求 return 为真。例子是;
old35(3) → true
old35(10) → true
old35(15) → 错误
所以 3 是正确的,因为它是 3 的倍数,但我目前无法使我的代码适用于所有实例。下面的代码;
public boolean old35(int n) {
if ((35 % n == 3) || (35 % n == 5))
return true;
return false;
}
我该如何编辑它以符合实践要求我做的事情的标准?
>
您可以使用条件的逻辑异或。基本上你可以做到C1 ^ C2
。
编辑:要检查是否是 3 的倍数,您必须检查 n % 3 == 0
,对于 5 的倍数也是如此。
我会抛出一个详细的解释。首先,您使用余数符号检查余数为零的条件;
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)));
}
但是简单的说,你做的是异或(^)操作,下面的代码有效且简单:
public static boolean old35(int n) {
return((n % 3 == 0) ^ (n % 5 == 0));
}
第一个问题,我正在尝试做一个练习,如果给定的非负数是 3 或 5 的倍数,但不是两者,我被要求 return 为真。例子是;
old35(3) → true
old35(10) → true
old35(15) → 错误
所以 3 是正确的,因为它是 3 的倍数,但我目前无法使我的代码适用于所有实例。下面的代码;
public boolean old35(int n) {
if ((35 % n == 3) || (35 % n == 5))
return true;
return false;
}
我该如何编辑它以符合实践要求我做的事情的标准? >
您可以使用条件的逻辑异或。基本上你可以做到C1 ^ C2
。
编辑:要检查是否是 3 的倍数,您必须检查 n % 3 == 0
,对于 5 的倍数也是如此。
我会抛出一个详细的解释。首先,您使用余数符号检查余数为零的条件;
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)));
}
但是简单的说,你做的是异或(^)操作,下面的代码有效且简单:
public static boolean old35(int n) {
return((n % 3 == 0) ^ (n % 5 == 0));
}