作为伪代码的一个例子:
if ((a mod 2) == 0) { isEven = true; } else { isEven = false; }
Cody Hatch.. 348
对于非负整数,可以使用余数运算符%
.您的确切示例:
if ((a % 2) == 0) { isEven = true; } else { isEven = false; }
这可以简化为单行:
isEven = (a % 2) == 0;
if/else是不必要的,只需使用isEven =(a%2)== 0, (78认同)
注意术语mod和模块,因为n(mod m)总是> = 0但不是n%m.n%m在> -m和
这不是模数运算符 - 它是余数运算符.请更正帖子! (7认同)
@ nl-x可能是因为最好明确优先权而不是将其留给惯例.我一个人不知道`%`在我查找之前在'=='之前被评估,所以不清楚表达式是否相当于`(a%2)== 0`或'a%(2 == 0)`.我想在布尔值与整数不同的java中不太重要 (4认同)
boolean even =((a&1)== 0).更容易. (2认同)
martinatime.. 110
以下是最小Java代码中伪代码的表示;
boolean isEven = a % 2 == 0;
我现在将其分解为其组件.Java中的模数运算符是百分比字符(%).因此,获取int%int将返回另一个int.double equals(==)运算符用于比较值,例如一对int并返回一个布尔值.然后将其分配给布尔变量'isEven'.根据运算符优先级,将在比较之前评估模数.
对于非负整数,可以使用余数运算符%
.您的确切示例:
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(==)运算符用于比较值,例如一对int并返回一个布尔值.然后将其分配给布尔变量'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);
在这里,我使用了bitwise-and运算符,并以选项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; }
虽然可以通过检查值是否为负值来进行正确的模数,如果是(正如许多人所建议的那样),则可以更正它,但是有一个更紧凑的解决方案.
(a % b + b) % b
这将首先进行模数,将值限制为-b - > + b范围,然后添加b以确保该值为正,让下一个模数将其限制为0 - > b范围.
注意:如果b为负数,结果也为负数
Java实际上没有C语言的模运算符.Java中的%是余数运算符.在正整数上,它的工作方式与模数完全相同,但它在负整数上的工作方式不同,与模数不同,它也可以用于浮点数.尽管如此,除了正整数之外,很少使用%,所以如果你想把它称为模数,那么请随意!
不使用modulo,代码运行得更快:
public boolean isEven(int a){ return ( (a & 1) == 0 ); } public boolean isOdd(int a){ return ( (a & 1) == 1 ); }
if (a % 2 == 0) { } else { }