奇数性(小心陷阱)

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

 

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;

 

 

 

转载于:https://www.cnblogs.com/LLeiFeng/archive/2013/01/06/2848269.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值