java中mod的语法是什么?

作为伪代码的例子:

if ((a mod 2) == 0) { isEven = true; } else { isEven = false; } 

对于非负整数,可以使用余数运算符% 。 为你确切的例子:

 if ((a % 2) == 0) { isEven = true; } else { isEven = false; } 

这可以简化为一行:

 isEven = (a % 2) == 0; 

这是用最小的Java代码表示你的伪代码;

 boolean isEven = a % 2 == 0; 

我现在将它分解成它的组件。 Java中的模数运算符是百分号字符(%)。 因此,int int返回int。 double equals(==)运算符用于比较值,如一对ints并返回一个布尔值。 然后将其分配给布尔variables“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); 

第三种方法是完整的,并使用三元运算符。 尽pipe三元运算符通常非常有用,但在这种情况下,我认为第二种方法更为优越。

 // Option 3: Ternary operator boolean isEven = ((a % 2) == 0) ? true : false; 

第四种也是最后一种方法是使用整数的二进制表示的知识。 如果最低有效位是0,那么数字是偶数。 这可以使用按位和运算符 (&)进行检查。 虽然这种方法是最快的(你正在做简单的位掩码而不是分割),但对于初学者来说,这可能是一些先进/复杂的。

 // Option 4: Bitwise-and boolean isEven = ((a & 1) == 0); 

在这里,我使用了按位和操作符,并以选项2所示的简洁forms表示它。以选项1的forms(或者选项3的forms)重写它作为练习留给读者。 ;)

希望有所帮助。

要使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实际上没有像C那样的模运算符。 Java中的%是余数运算符。 在正整数上,它的工作方式与模数完全相同,但对负整数的作用不同,与模数不同,也可以使用浮点数。 尽pipe如此,除了正整数之外,很less使用%,所以如果你想称它为模数,那就随意吧!

虽然可以通过检查值是否为负来进行适当的模,如果是正确的(正如许多人所build议的那样),那么就有一个更紧凑的解决scheme。

 (a % b + b) % b 

这将首先执行模,将值限制在-b – > + b范围内,然后加上b以确保该值为正,让下一个模将其限制在0 – > b范围内。

注意:如果b是负数,结果也是负数

代码运行得更快,而不使用模:

 public boolean isEven(int a){ return ( (a & 1) == 0 ); } public boolean isOdd(int a){ return ( (a & 1) == 1 ); } 
 if (a % 2 == 0) { } else { } 

你应该在使用'余数'运算符之前检查规范:

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; } 

模运算符是%(百分号)。 为了testing均匀性,或者通常对2进行模运算,还可以使用&(和运算符),如isEven =!(a&1)。

另外,mod可以这样使用:

 int a = 7; b = a % 2; 

b会等于1.因为7 % 2 = 1

另一种方法是:

 boolean isEven = false; if((a % 2) == 0) { isEven = true; } 

但最简单的方法仍然是:

 boolean isEven = (a % 2) == 0; 

就像@Steve Kuo所说的那样。

来自@Cody的代码的替代方法:

使用模数运算符:

 bool isEven = (a % 2) == 0; 

我认为这比if / else编写的代码稍微好一点,因为重复和未使用的灵活性较less。 它确实需要更多的脑力来检查,但是,好的命名是isEven补偿的。