-25在Java中列为偶数

时间:2014-03-18 18:39:42

标签: java

我正在编写一个程序,只打印出整数数组中的偶数。

以下是代码:

public class ForLoopExample3
{
    public static void main(String[] args)
    {
        int[] arr = {7, 6, 9, -2, 8, 12, 17, -25, 15, 18, 21, 13};

        for(int i = 0; i < arr.length; i++)
        {
            if((arr[i] % 2) > 0)
                continue;
            System.out.println(arr[i]);
        }
    }
}

当我运行上面的程序时,我得到以下输出:

enter image description here

所以问题是为什么-25会在偶数中显示?

6 个答案:

答案 0 :(得分:4)

它与%模数运算符在Java中的工作方式有关。此运算符的结果符号不能与原始数字相反。也就是说,如果原始数字是负数,则模数将为0或负数。

根据JLS, Section 15.17.3

  

从该规则可以得出,只有当被除数为负时,余数运算的结果才可以是负数,只有在被除数为正数时才能为正数。而且,结果的大小总是小于除数的大小。

您从-1的结果中获得1,而不是-25 % 2,并且您的print语句会执行。

检查余数是否不等于零。

if((arr[i] % 2) != 0)
     continue;

或者,消除continue ...

if((arr[i] % 2) == 0)
{
    System.out.println(arr[i]);
}

答案 1 :(得分:3)

-25 mod 2-1,因此您的if()测试成功:该值不大于0.您应该测试!= 0

答案 2 :(得分:1)

你应该替换'&gt;'到'!='。这里'((arr [i]%2)!= 0'表示余数不等于零,在这种情况下你会继续。否则你会打印。

答案 3 :(得分:0)

如果您打印-25 % 2,您将获得-1,因为您的条件是

if((arr[i] % 2) > 0)

当该操作为零或更少时,它将打印为甚至,这是不正确的。您应该检查操作是否等于0。偶数为零,否则,它很奇怪:

if ((arr[i] % 2) == 0)
    // even
else
    // odd

答案 4 :(得分:0)

那是因为-25%2 = -1且-1 < 0

答案 5 :(得分:0)

你的mod语句应该是!= 0不是&gt; 0. -25%2 = -1。