当前位置:首页 > 技术 > 正文内容

JAVA解惑之奇数性

不羁月人2012-03-21技术591

有一段时间没写过东西了,由于各种状况。今晚就抽些时间来更新一篇。 

如题所示,这次要讨论的是JAVA中关于判断一个数(这里以int为例)是否为奇数的问题。  

首先看以下的代码: 

boolean isOddBy1(int i) {
return i % 2 == 1;
}

当使用0、1、2……等测试时,结果符合期望。这样看起来以上的代码是没错的。的确,在一定程度上来说这个方法具有正确性,但只局限于非负整数,当使用负奇数测试时,会发现结果不符合期望。例如-3的时候会返回false,即判断结果为不是奇数。 稍微有些数学基础的人都明白,负数求余返回的值也是负数。而Java 对取余操作符(%)的定义所产生的后果。该操作符被定义为对于所有的 int 数值 a 和所有的非零 int 数值 b,都满足下面的恒等式:

 (a / b) * b + (a % b) == a

换句话说,如果你用b整除a,将商乘以b,然后加上余数,那么你就得到了最初的值 a 。该恒等式具有正确的含义,但是当与 Java 的截尾整数整除操作符相结合时,它就意味着:当取余操作返回一个非零的结果时,它与左操作数具有相同的正负符号。 当i为负奇数时,其余数为-1,因此上面的方法将返回false。

这个问题很容易解决,只需与0作判断即可,见下面的代码: 

boolean isOddBy0(int i) {
return i % 2 != 0;
}

然后测试正负整数和零都能返回期望值。 这个问题看起来很低级,但也是容易犯的错误之一,所以不得不注意。 其实这个问题是出自于《JAVA解惑》,我只是为了加强记忆而操作一遍并以文章的形式发出来。或者你会觉得这有些多余,但脚踏实地也是提高编程能力的关键。

曾经初中的一位老师对我说过,“你像一匹老马,脚踏实地,一步一步向前走”。从今以后我也会继续保持这样的步伐不断迈进。

扫描二维码推送至手机访问。

版权声明:本文由不羁月人(Moonman.cool)发布,如需转载请注明出处。

本文链接:https://www.moonman.cool/post/5.html

分享给朋友:

相关文章

Fedora 17/18 之 SSH基本配置及无密码(密钥验证)登录配置

前言最近因为毕设需要搭建Hadoop,理所当然的要用到SSH无密码登录了,其实就是用公私钥认证的方式进行登录。 不久前曾在Fedora17上测试成功,结果因为一些细节上的问题,昨天在Fedora18的时候配了大半天都没成功,还以为是新版本...

Fedora 17/18 之 JDK7安装和配置

前言Fedora自带的openjdk很多时候不符合要求,所以JDK的安装和配置是必须的操作,整理一下备忘。 P.S.1.这里以jdk-7u11-linux-x64为例。 P.S.2.经Fedora17/18测试成功。 &nbs...

RabbitMQ报错Error: unable to connect to node rabbit@xxx: nodedown的解决方式

环境:Win10x64+erlang_otp_19.1x64+RabbitMQ3.6.6刚开始研究RabbitMQ,就遇到问题:安装好之后,按照官方安装向导执行rabbitmqctl status命令检查状态时,报如下错误:Status&n...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。