Java中mod的语法是什么
以伪代码为例:
if ((a mod 2) == 0) { isEven = true; } else { isEven = false; }
解决方案
这是用最少的Java代码表示的伪代码;
boolean isEven = a % 2 == 0;
我现在将其分解为各个部分。 Java中的模运算符是百分比字符(%)。因此,采用int%int会返回另一个int。双重等于(==)运算符用于比较值,例如一对整数,并返回布尔值。然后将其分配给布尔变量" isEven"。基于运算符的优先级,将在比较之前评估模量。
模运算符为%(百分号)。要测试均匀性或者通常对2的幂进行模运算,还可以使用&(the和运算符),例如isEven =!(a&1)。
if (a % 2 == 0) { } else { }
对于非负整数,可以使用余数运算符"%"。对于确切示例:
if ((a % 2) == 0) { isEven = true; } else { isEven = false; }
可以简化为单线:
isEven = (a % 2) == 0;
另外,mod可以这样使用:
int a = 7; b = a % 2;
b等于1,因为7%2 = 1.
@Cody的代码的替代方法:
使用模运算符:
bool isEven = (a % 2) == 0;
我认为这比编写if / else稍好一些,因为重复和未使用的灵活性更少。检查确实需要更多的脑力,但是" isEven"的良好命名可以弥补。
Java实际上没有C那样的模运算符。 Java中的%是余数运算符。在正整数上,它的工作方式与模数完全相同,但在负整数上的工作方式不同,并且与模数不同,它也可以使用浮点数。尽管如此,在除正整数之外的任何东西上都很少使用%,因此,如果我们想将它称为模数,那就放心了!
由于其他所有人都已经给出了答案,因此我将添加一些其他上下文。 %"模数"运算符实际上正在执行余数运算。 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; }
该代码运行更快,无需使用模数:
public boolean isEven(int a){ return ( (a & 1) == 0 ); } public boolean isOdd(int a){ return ( (a & 1) == 1 ); }