第一个问题,我正在尝试做一个练习,如果给定的非负数是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));
}

09-04 09:03