当前位置:  开发笔记 > 编程语言 > 正文

java中mod的语法是什么?

如何解决《java中mod的语法是什么?》经验,为你挑选了8个好方法。

作为伪代码的一个例子:

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和(56认同)

这不是模数运算符 - 它是余数运算符.请更正帖子! (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'.根据运算符优先级,将在比较之前评估模数.



1> Cody Hatch..:

对于非负整数,可以使用余数运算符%.您的确切示例:

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

这可以简化为单行:

isEven = (a % 2) == 0;


if/else是不必要的,只需使用isEven =(a%2)== 0,
注意术语mod和模块,因为n(mod m)总是> = 0但不是n%m.n%m在> -m和这不是模数运算符 - 它是余数运算符.请更正帖子!
@ nl-x可能是因为最好明确优先权而不是将其留给惯例.我一个人不知道`%`在我查找之前在'=='之前被评估,所以不清楚表达式是否相当于`(a%2)== 0`或'a%(2 == 0)`.我想在布尔值与整数不同的java中不太重要
boolean even =((a&1)== 0).更容易.

2> martinatime..:

以下是最小Java代码中伪代码的表示;

boolean isEven = a % 2 == 0;

我现在将其分解为其组件.Java中的模数运算符是百分比字符(%).因此,获取int%int将返回另一个int.double equals(==)运算符用于比较值,例如一对int并返回一个布尔值.然后将其分配给布尔变量'isEven'.根据运算符优先级,将在比较之前评估模数.


最小的没有括号;)
它是余数运算符,而不是模数运算符.

3> Rob Rolnick..:

由于其他人已经给出了答案,我将添加一些额外的背景.%"模数"运算符实际上执行余数运算.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的表单)作为练习留给读者.;)

希望有所帮助.


将选项4置于极端,boolean isEven =!(a&1),返回与a是否是奇数的相反,其中a = 1 == 1(真).当然,这就是那种使代码难以理解的编码器技巧.;)

4> 小智..:

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



5> Stefan T..:

虽然可以通过检查值是否为负值来进行正确的模数,如果是(正如许多人所建议的那样),则可以更正它,但是有一个更紧凑的解决方案.

(a % b + b) % b

这将首先进行模数,将值限制为-b - > + b范围,然后添加b以确保该值为正,让下一个模数将其限制为0 - > b范围.

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



6> Greg Charles..:

Java实际上没有C语言的模运算符.Java中的%是余数运算符.在正整数上,它的工作方式与模数完全相同,但它在负整数上的工作方式不同,与模数不同,它也可以用于浮点数.尽管如此,除了正整数之外,很少使用%,所以如果你想把它称为模数,那么请随意!



7> 小智..:

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

public boolean isEven(int a){
    return ( (a & 1) == 0 );
}

public boolean isOdd(int a){
    return ( (a & 1) == 1 );
}


过早优化多少?
@LluisMartinez这是计算中最错误的说法之一.完整的报价是"程序员浪费大量的时间思考,也不必担心,他们的节目非关键部分的速度,而这些尝试的效率实际上有一个强烈的负面影响时,调试和维护的考虑.我们应该忘记小效率,大约97%的时间说:过早的优化是所有邪恶的根源.然而,我们不应该把关键的3%的机会放弃." 这实际上意味着完全不同的东西
这看起来比接受的答案要清晰得多.这与过早优化无关.它更好, - 如果它的工作原理.
@EJP你可能是对的.我做了一个测试(循环有100万次迭代),模数为4000纳秒,逻辑和为2500纳秒.

8> J D OConal..:
if (a % 2 == 0) {
} else {
}

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有