奇数性(小心陷阱)

下面是一个确定参数是否为奇数的

 

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%20比较而不是与1比较久好了。

 

Public static boolean isOdd(int i)

{

Return i%2!=0;

 

 

 

posted @ 2013-01-06 20:40  LLeiFeng  阅读(151)  评论(0编辑  收藏  举报