简单的编程实践(使用模运算)

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));
}