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" 这样的输出。

下面是转换公式,请注意,千万不要用整数除法!

F=C\times\frac{9}{5}+32

练习3-3

编写一个程序,将秒数转换为小时数、分钟数和秒数。这个程序应:(1) 提示用户输入秒数;(2) 从键盘读取一个整数;(3) 计算结果;(4) 用 printf 显示输出。例如,它应显示 "5000 seconds = 1 hours, 23 minutes, and 20 seconds" 这样的输出。

提示:可使用求模运算符。

练习3-4

这个练习的目标是编写一个“猜数”游戏,其输出应类似于以下这样:

  1. I'm thinking of a number between 1 and 100
  2. (including both). Can you guess what it is?
  3. Type a number: 45
  4. Your guess is: 45
  5. The number I was thinking of is: 14
  6. You were off by: 31

要想生成随机数,可使用 java.util 中的 Random 类,其工作原理如下:

  1. import java.util.Random;
  2. public class GuessStarter {
  3. public static void main(String[] args) {
  4. // 生成一个随机数
  5. Random random = new Random();
  6. int number = random.nextInt(100) + 1;
  7. System.out.println(number);
  8. }
  9. }

与本章介绍的 Scanner 类一样,要想使用 Random 类,必须先导入。另外,与创建 Scanner 对象一样,必须用 new 运算符创建一个 Random 对象(随机数生成器)。

然后就可以用方法 nextInt 来生成随机数了。在上面的示例中,nextInt(100) 的结果是一个 0~99(闭区间)的数字。通过将这个结果加 1,将得到一个 1~100(闭区间)的数字。

(1) GuessStarter 的定义位于文件 GuessStarter.java 中,而这个文件位于本书代码仓库的目录 ch03 中。

(2) 编译并运行这个程序。

(3) 修改这个程序,提示用户输入一个数字,再用 Scanner 读取一行用户输入。编译并测试这个程序。

(4) 将用户输入作为整数读取,并显示结果。再次编译并测试这个程序。

(5) 计算并显示用户猜测的数字和生成的随机数之间的差。