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
补偿的。