Java编程谜题:挑战你的编程功底
5星 · 超过95%的资源 需积分: 10 106 浏览量
更新于2024-08-02
收藏 444KB PDF 举报
"这篇资源包含了几个有趣的Java编程谜题,旨在测试和提升你的Java技能。由Joshua Bloch和Neal Gafter等知名专家编写,来自Google Inc.和Microsoft Corporation。这些谜题涵盖Java语言和核心库,但不涉及图形用户界面(GUI)或企业级应用。其中展示了如何通过分析短小的程序来识别奇怪的行为,并解决问题,从而学习到如何避免常见的编程陷阱和理解Java的内在机制。"
谜题解析:
题目中提供的代码是"SimpleQuestion"类,包含一个静态方法"yesOrNo"和主方法"main"。这个程序的目的是根据输入的字符串判断是否为肯定回答,并返回对应的布尔值。"yesOrNo"方法首先将输入字符串转换为小写,然后检查是否等于"yes"、"y"或"t",如果满足条件则将字符串设置为"true"。最后,使用"Boolean.getBoolean"方法将字符串转换为布尔值。
代码中的问题在于,当输入字符串为"true"时,方法会将其改为"true",然后尝试将这个字符串转换为布尔值。然而,"Boolean.getBoolean"方法并不像预期那样处理这种情况。它只接受"true"或"false"这两个字符串作为有效输入,并返回相应的布尔值。其他任何非空字符串都将导致抛出"NullPointerException"。
主方法"main"调用"yesOrNo"两次,分别传入"true"和"YeS"。由于"true"已经满足了转换条件,所以第一次调用将不会出现异常。然而,第二次调用传入的"YeS"在经过转换后为"true",这会导致"Boolean.getBoolean"抛出异常,因为"true"不是一个有效的布尔字符串。
实际运行时,程序会抛出异常,因此正确答案是(a) falsefalse(在实践中)。这是因为第二个"yesOrNo"调用会在尝试转换"true"时失败,导致程序中断,而第一个调用会返回"true",所以主方法的输出在异常发生前会被打印出来。
谜题的解决方法是修改"yesOrNo"方法,避免将字符串替换为"true"。可以直接在if语句中返回true,如下所示:
```java
public static boolean yesOrNo(String s) {
s = s.toLowerCase();
if (s.equals("yes") || s.equals("y") || s.equals("t")) {
return true;
}
return Boolean.getBoolean(s);
}
```
这样,即使输入的字符串不是"yes"、"y"或"t",也不会尝试将非标准的字符串转换为布尔值,而是直接使用"Boolean.getBoolean"处理原始输入。
2012-03-11 上传
2012-07-14 上传
611 浏览量
2008-08-27 上传
2010-04-19 上传
zb_fly
- 粉丝: 0
- 资源: 6
最新资源
- ES管理利器:ES Head工具详解
- Layui前端UI框架压缩包:轻量级的Web界面构建利器
- WPF 字体布局问题解决方法与应用案例
- 响应式网页布局教程:CSS实现全平台适配
- Windows平台Elasticsearch 8.10.2版发布
- ICEY开源小程序:定时显示极限值提醒
- MATLAB条形图绘制指南:从入门到进阶技巧全解析
- WPF实现任务管理器进程分组逻辑教程解析
- C#编程实现显卡硬件信息的获取方法
- 前端世界核心-HTML+CSS+JS团队服务网页模板开发
- 精选SQL面试题大汇总
- Nacos Server 1.2.1在Linux系统的安装包介绍
- 易语言MySQL支持库3.0#0版全新升级与使用指南
- 快乐足球响应式网页模板:前端开发全技能秘籍
- OpenEuler4.19内核发布:国产操作系统的里程碑
- Boyue Zheng的LeetCode Python解答集