作为伪代码中的一个例子:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
作为伪代码中的一个例子:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
当前回答
另一种方法是:
boolean isEven = false;
if((a % 2) == 0)
{
isEven = true;
}
但最简单的方法仍然是:
boolean isEven = (a % 2) == 0;
就像郭怡广说的。
其他回答
在不使用模运算的情况下,代码运行得更快:
public boolean isEven(int a){
return ( (a & 1) == 0 );
}
public boolean isOdd(int a){
return ( (a & 1) == 1 );
}
来自@Cody的代码的替代方案:
使用模运算符:
bool isEven = (a % 2) == 0;
我认为这是比写if/else更好的代码,因为有更少的重复和未使用的灵活性。它确实需要更多的脑力来检查,但isEven的良好命名弥补了这一点。
既然其他人都已经给出了答案,我将添加一点额外的上下文。%“模”运算符实际上是在执行余数运算。mod和rem之间的区别很微妙,但很重要。
(-1 mod 2)通常会得到1。更具体地说,给定两个整数X和Y,运算(X mod Y)倾向于返回范围[0,Y]的值。换句话说,X和Y的模量总是大于或等于零,小于Y。
使用“%”或rem操作符执行相同的操作将保持X值的符号。如果X为负,则得到范围为(-Y, 0)的结果。如果X为正数,则得到范围为[0,Y)的结果。
通常这种微妙的区别并不重要。回到你的代码问题,有多种方法来解决“均匀性”。
第一种方法对初学者很好,因为它特别冗长。
// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
isEven = true
}
else
{
isEven = false
}
第二种方法更好地利用了语言,并产生了更简洁的代码。(不要忘记==运算符返回一个布尔值。)
// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);
第三种方法是为了完整起见,它使用三元操作符。虽然三元操作符通常非常有用,但在这种情况下,我认为第二种方法更好。
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
第四种也是最后一种方法是使用整数的二进制表示的知识。如果最低有效位为0,则该数字为偶数。这可以使用位与操作符(&)进行检查。虽然这种方法是最快的(你做的是简单的位屏蔽而不是除法),但对于初学者来说可能有点高级/复杂。
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
这里我使用了位与操作符,并以选项2所示的简洁形式表示它。以选项1的形式(或者选项3的形式)重写它是留给读者的练习。,)
为了让Java的% (REM)操作像MOD一样工作,对于负X和正Y值,你可以使用以下方法:
private int mod(int x, int y)
{
int result = x % y;
if (result < 0)
{
result += y;
}
return result;
}
或者使用三元操作符(更短,但在某些情况下不可能或效率更低):
private int mod(int x, int y)
{
int result = x % y;
return result < 0? result + y : result;
}
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;
}