下面是一个确定参数是否为奇数的
public static boolean isOdd(int i)
{
return i%2 == 1;
}
很多人一开始会认为这段代码是可行的,不过很遗憾,这段代码,它并不可行。。
理由很简单,因为在所有的int 数里,有一半的数是负数,而此方法对所有的负奇数的判断都会失败。在任何负整数里面改方法都是返回false.
当i为为负奇数,i%2等于-1而不是1.
对于上面的结果,这就得从java对取余(%)操作的定义来分析了。
该操作符被定义为对于所有的int 数值a和所有的非零int 数值b,都满足下面的恒等式:
(a/b)*b + (a%b) == a
这句话也以为着:当取余操作返回一个非零的结果时,它与左操作数具有相同的正负符号。
这个问题很容易改正。只需要将i%2与0比较而不是与1比较久好了。
Public static boolean isOdd(int i)
{
Return i%2!=0;
}