3.12 练习
本章的示例代码位于仓库 ThinkJavaCode 的目录 ch03 中,有关如何下载这个仓库,请参阅前言中的“使用示例代码”一节。做以下的练习前,建议你先编译并运行本章的示例。
如果你还没有阅读 A.3 节,那么现在正是阅读的好时机。该节介绍了命令行界面,这是与计算机交互的强大而高效的一种方式。
练习3-1
使用 printf 时,Java 编译器不会检查其中的格式字符串。请尝试用 %f 显示一个类型为 int 的值,并看看结果将会如何。用 %d 显示 double 值呢?指定两个格式说明符,却只提供一个值,又会发生什么呢?
练习3-2
编写一个程序,将摄氏温度转换为华氏温度。这个程序应:(1) 提示用户输入摄氏温度值; (2) 从键盘读取一个 double 值;(3) 计算结果;(4) 将输出设置为包含一位小数。例如,它应显示 "24.0 C=75.2 F" 这样的输出。
下面是转换公式,请注意,千万不要用整数除法!

练习3-3
编写一个程序,将秒数转换为小时数、分钟数和秒数。这个程序应:(1) 提示用户输入秒数;(2) 从键盘读取一个整数;(3) 计算结果;(4) 用 printf 显示输出。例如,它应显示 "5000 seconds = 1 hours, 23 minutes, and 20 seconds" 这样的输出。
提示:可使用求模运算符。
练习3-4
这个练习的目标是编写一个“猜数”游戏,其输出应类似于以下这样:
I'm thinking of a number between 1 and 100(including both). Can you guess what it is?Type a number: 45Your guess is: 45The number I was thinking of is: 14You were off by: 31
要想生成随机数,可使用 java.util 中的 Random 类,其工作原理如下:
import java.util.Random;public class GuessStarter {public static void main(String[] args) {// 生成一个随机数Random random = new Random();int number = random.nextInt(100) + 1;System.out.println(number);}}
与本章介绍的 Scanner 类一样,要想使用 Random 类,必须先导入。另外,与创建 Scanner 对象一样,必须用 new 运算符创建一个 Random 对象(随机数生成器)。
然后就可以用方法 nextInt 来生成随机数了。在上面的示例中,nextInt(100) 的结果是一个 0~99(闭区间)的数字。通过将这个结果加 1,将得到一个 1~100(闭区间)的数字。
(1) GuessStarter 的定义位于文件 GuessStarter.java 中,而这个文件位于本书代码仓库的目录 ch03 中。
(2) 编译并运行这个程序。
(3) 修改这个程序,提示用户输入一个数字,再用 Scanner 读取一行用户输入。编译并测试这个程序。
(4) 将用户输入作为整数读取,并显示结果。再次编译并测试这个程序。
(5) 计算并显示用户猜测的数字和生成的随机数之间的差。
