作为伪代码中的一个例子:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
作为伪代码中的一个例子:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
当前回答
对于非负整数,可以使用余数运算符%,而不是语义略有不同的模运算符。具体的例子是:
if ((a % 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
这可以简化为一行代码:
isEven = (a % 2) == 0;
其他回答
在使用'remainder'操作符%之前,您应该检查规范:
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);
对于非负整数,可以使用余数运算符%,而不是语义略有不同的模运算符。具体的例子是:
if ((a % 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
这可以简化为一行代码:
isEven = (a % 2) == 0;
正如其他人指出的那样,%(余数)操作符与数学上的操作符不同 模量运算/函数。
Mod vs % x mod n函数在[0,n)范围内将x映射到n。 而x % n操作符在(-n,n)范围内将x映射到n。
为了有办法用数学上的模运算和不运算 关心x前面的符号1可以用:
((x % n) + n) % n
也许这张图有助于更好地理解它(我一开始很难理解它)
来自@Cody的代码的替代方案:
使用模运算符:
bool isEven = (a % 2) == 0;
我认为这是比写if/else更好的代码,因为有更少的重复和未使用的灵活性。它确实需要更多的脑力来检查,但isEven的良好命名弥补了这一点。
虽然可以通过检查值是否为负并纠正它(许多人建议的方法)来进行适当的模运算,但还有一个更紧凑的解决方案。
(a % b + b) % b
这将首先进行模运算,将值限制在-b -> +b范围内,然后加上b以确保值为正,让下一个模运算将其限制在0 -> b范围内。
注:如果b为负数,结果也是负数