Java之谜:解析编程中的奇数判断难题

需积分: 15 22 下载量 173 浏览量 更新于2024-07-25 收藏 2.86MB PDF 举报
"Java编程中的常见难题解析,包括表达式谜题,特别是关于判断奇数的方法分析。" 在Java编程中,我们经常会遇到一些看似简单但实则微妙的问题。本资源详细探讨了其中的一个经典谜题,即如何正确判断一个整数是否为奇数。描述中的例子提供了一个可能产生误导的`isOdd`方法,该方法通过计算`i % 2`来判断奇偶性。然而,由于Java中取余操作 `%` 的特定行为,这种方法并不总是准确。 首先,`isOdd`方法的原始实现如下: ```java public static boolean isOdd(int i) { return i % 2 == 1; } ``` 按照逻辑,如果一个整数除以2的余数为1,那么它应该是一个奇数。然而,当`i`为负奇数时,`i % 2`的结果实际上是-1,这会导致`isOdd`返回`false`,而实际上`i`是一个奇数。这是因为Java的取余运算符 `%` 遵循以下等式: `(a / b) * b + (a % b) == a` 此等式确保了取余操作的正确性,但在负数上可能导致误解。当`i`为负数时,`i / 2`会进行截尾整数除法,导致结果偏向负无穷。因此,`i % 2`会返回一个负数,即使`i`是奇数。 为了解决这个问题,我们可以修改`isOdd`方法,避免对负数的误判: ```java public static boolean isOdd(int i) { return i % 2 != 0; } ``` 这样的修改使得`isOdd`方法在所有整数情况下都能正确工作,无论正负。另一种优化的解决方案是使用位操作符`&`,这在性能至关重要的场景下更为高效: ```java public static boolean isOdd(int i) { return (i & 1) != 0; } ``` 这里,`i & 1`的结果只有在`i`是奇数时才为1,因为奇数的二进制表示的最后一位总是1,而偶数的最后一位总是0。位操作通常比算术运算更快,因此在性能敏感的代码中是个好选择。 总结来说,理解和掌握Java中运算符的行为,特别是在处理负数和边界情况时,是避免编程陷阱的关键。对于此类问题的深入探讨和实践有助于提高代码质量,避免潜在的bug,并确保程序的正确运行。通过不断学习和解决问题,Java程序员可以更好地应对各种编程挑战。
2011-05-08 上传
********Shenkxiao Resources******** 压缩包密码:shenkxiao 资源:Java解惑(中文版)、java puzzlers traps pitfalls,and Corner Cases 作者:Joshua Bloch Neal Gafter 版本:中文版 主要内容: Java解惑(英文版)—典藏原版书苑 目录 1 introduction 2 expressive puzzlers puzzle 1:oddity puzzle 2:time for a change puzzle 3:long pision puzzle 4:it s elementary puzzle 5:the joy of hex puzzle 6:multicast puzzle 7:swap meat puzzle 8:dos equis puzzle 9:tweedildum puzzle 10:tweedledee 3 przzlers with character puzzle 11:the last laugh puzzle 12:abc puzzle 13:animal farm puzzle 14:escape rout puzzle 15:hello whirled puzzle 16:line printer puzzle 17:huh? puzzle 18:string cheese puzzle 19:classy fire puzzle 20:what s my class? puzzle 21:what s my class,take2 puzzle 22:dupe of url puzzle 23:no pain,no gain 4 loopy puzzlers puzzle 24:a big delight in every byte puzzle 25:inclement increment puzzle 26:in the loop puzzle 27:shifty i s puzzle 28:looper puzzle 29:bride of loper puzzle 30:son of loper puzzle 31:ghost of looper puzzle 32:curse of looper puzzle 33:looer meets the wolfman puzzle 34:down for the count puzzle 35:minute by minute 5 exceptonal puzzlers 6 classy puzzlers 7 library puzzlers 8 classier puzzlers 9 more library puzzlers 10 advanced puzzlers a catalog of traps and pitfalls b notes on the illusions refereces index 本书深入研究Java编程语言及其核心类为的细微之处,特写95个有关Java或其他类库的陷阱和缺陷的谜题,其中大多数谜题都采用短程序的形式给出。在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。本书附录部分列出了陷阱及缺陷的目录,可供读者进一学习参考。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、总结归纳Java编程语言的知识点,适合具有Java知识的学习者和有编程经验的Java程序员阅读。 上传理由:精品典藏共享,网络上下载该资源太费劲,我来共享吧 因为是精品所以分数也比较高。 ***********************************