作为伪代码示例:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
在使用“余数”运算符%之前,您应该先检查规范:
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.3
// bad enough implementation of isEven method, for fun. so any worse?
boolean isEven(int num)
{
num %= 10;
if(num == 1)
return false;
else if(num == 0)
return true;
else
return isEven(num + 2);
}
isEven = isEven(a);
Java中的余数运算符是%
,模运算符可以表示为
public int mod(int i, int j)
{
int rem = i % j;
if (j < 0 && rem > 0)
{
return rem + j;
}
if (j > 0 && rem < 0)
{
return rem + j;
}
return rem;
}
int a = 7;
b = a % 2;
b
将会等于1。因为7 % 2 = 1
。
在Java
中,可以通过以下方式执行模运算:
最初的回答:
Math.floorMod(a, b)
注意:取模运算(mod operation)与求余运算(remainder operation)是不同的。在Java
中,可通过以下方式执行求余运算:
a % b
Math.floorMod()
的 javadoc 中有这样的描述:floor modulus 是 x - (floorDiv(x, y) * y),与除数 y 同号,且在 -abs(y) < r < +abs(y) 范围内。
因此它并不完全等同于数学模运算。但是,在相同方法的 Javadoc 中有一种获取正结果的方法:如果参数的符号未知且需要正模,则可以计算为 (floorMod(x, y) + abs(y)) % abs(y)
。 - WesternGunfloorMod
操作将按预期工作。还有用于long
值的floorMod
,对于更大的值则有BigInteger
。 - Maarten BodewesAnother way is:
boolean isEven = false;
if((a % 2) == 0)
{
isEven = true;
}
。
boolean isEven = (a % 2) == 0;
就像@Steve Kuo所说的。
与 @Cody 的代码相比,另一种选择:
使用模运算符:
bool isEven = (a % 2) == 0;
我认为这段代码比写if/else更好,因为它减少了重复和未使用的灵活性。它需要更多的脑力来检查,但isEven
的良好命名弥补了这一点。