Java解惑--一本很好的java书籍
需积分: 0 29 浏览量
更新于2010-06-23
收藏 562KB DOC 举报
在Java编程中,理解语言的细节至关重要,尤其是在处理特定操作如取余运算和浮点数计算时。本文将深入探讨两个常见的Java谜题,这些谜题涉及到了Java中的取余运算符 `%` 和浮点数表示的不精确性。
我们来看第一个谜题,关于判断奇数性的方法。在Java中,使用`i % 2 == 1`来检查一个整数`i`是否为奇数,初看之下似乎没有问题,因为取余运算符 `%` 可以得到整除后的余数。然而,当`i`是负数时,`i % 2`的结果会是-1而不是1,导致负奇数被误判为偶数。这是由于Java的取余运算符遵循的数学恒等式 `(a / b) * b + (a % b) == a`,在整数除法时,负数的取余结果保持了负数的符号。为了解决这个问题,我们可以修改判断条件为 `i % 2 != 0`,这样无论正负,只要余数不等于0,就说明是奇数。如果在性能至关重要的场景下,还可以使用位操作符 `&` 来替代取余运算,如 `return (i & 1) != 0;`,这种方法效率更高。
第二个谜题涉及浮点数的精度问题。在Java中,`double`类型的数值是用二进制浮点数表示的,这意味着某些十进制小数无法精确表示。例如,1.1在二进制中是一个无限循环小数,因此在计算机内存中存储的实际上是1.1的一个近似值。当我们尝试计算 `2.00 - 1.10` 时,实际上是在进行两个近似值的减法运算,结果可能会产生意想不到的精度误差。例如,上述代码实际输出可能是 `0.8999999999999999`,而不是期望的 `0.90`。要解决这个问题,我们不能单纯依赖浮点数运算,尤其是对于货币计算这样的应用,因为二进制浮点数的不精确性可能导致财务数据的错误。一种可行的解决方案是使用整数类型(如 `int` 或 `long`)来存储和计算金额,或者使用Java 5.0以后引入的 `BigDecimal` 类,它可以提供任意精度的十进制运算。
在编写Java代码时,特别是在处理数学运算和数值类型时,我们需要对Java的运算符行为和数据类型有深入的理解。对于取余运算,要注意负数的情况;对于浮点数,要意识到它们的精度限制,并在必要时使用更精确的数据类型或算法来避免误差。这些知识对于提升Java编程的质量和可靠性至关重要。
koper
- 粉丝: 0
- 资源: 1
最新资源
- 《基于区块链的文档管理系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于区块链的学生出勤管理应用程序》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于区块链的学术证书系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于区块链的物流网络》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于区块链的银行应用程序》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于区块链的证书创建和验证系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于区块链的证书验证应用程序》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于区块链技术的去中心化投票系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于以太坊区块链的安全电子投票系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于以太坊区块链的电子选举系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于以太坊区块链的电子废物管理系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于以太坊区块链的假新闻预测器》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于以太坊区块链的简单赌场游戏》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于以太坊区块链的投票系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- HCIA动态路由 课后作业
- 实验室小程序-JAVA-基于SSM的是实验室管理微信小程序设计与实现(毕业论文+开题报告)