算法(4th ed)(50):基础——基础编程模型 3.9.3

阅读数:11 2019 年 10 月 30 日 07:03

算法(4th ed)(50):基础——基础编程模型 3.9.3

(输入输出:格式化输出)

复制代码
public class RandomSeq
{
   public static void main(String[] args)
   {  // 打印 N 个 (lo, hi) 之间的随机值
      int N = Integer.parseInt(args[0]);
      double lo = Double.parseDouble(args[1]);
      double hi = Double.parseDouble(args[2]);
      for (int i = 0; i < N; i++)
      {
         double x = StdRandom.uniform(lo, hi);
         StdOut.printf("%.2f\n", x);
      }
   }
}
`StdOut` 的用例示例
复制代码
% java RandomSeq 5 100.0 200.0
123.43
153.13
144.38
155.18
104.02

在最简单的情况下 printf() 方法接受两个参数。第一个参数是一个格式字符串,描述了第二个参数应该如何在输出中被转换为一个字符串。最简单的格式字符串的第一个字符是 % 并紧跟一个字符表示的转换代码。我们最常使用的转换代码包括d(用于 Java 整型的十进制数)、f(浮点型)和 s(字符串)。在 % 和转换代码之间可以插入一个整数来表示转换之后的值的宽度,即输出字符串的长度。默认情况下,转换后会在字符串的左边添加空格以达到需要的宽度,如果我们想在右边加入空格则应该使用负宽度(如果转换得到的字符串比设定宽度要长,宽度会被忽略)。在宽度之后我们还可以插入一个小数点以及一个数值来指定转换后的 double值保留的小数位数(精度)或是 String 字符串所截取的长度。使用 printf() 方法时需要记住的最重要的一点就是,格式字符串中的转换代码和对应参数的数据类型必须匹配。也就是说,Java 要求参数的数据类型和转换代码表示的数据类型必须相同。printf() 的第一个 String 字符串参数也可以包含其他字符。所有非格式字符串的字符都会被传递到输出之中,而格式字符串则会被参数的值所替代(按照指定的方式转换为字符串)。例如,这条语句:

复制代码
StdOut.printf("PI is approximately %.2f\n", Math.PI);

会打印出:

复制代码
PI is approximately 3.14

可以看到,在 printf() 中我们需要明确地在第一个参数的末尾加上 \n 来换行。printf() 函数能够接受两个或者更多的参数。在这种情况下,在格式化字符串中每个参数都会有对应的转换代码,这些代码之间可能隔着其他会被直接传递到输出中的字符。也可以直接使用静态方法 String.format() 来用和 printf() 相同的参数得到一个格式化字符串而无需打印它。我们可以用格式化打印方便地将实验数据输出为表格形式(这是它们在本书中的主要用途),如表 1.1.15 所示。

表 1.1.15 printf() 的格式化方式(更多选项请见本书网站)

数据类型转换代码举例格式化字符串举例转换后输出的字符串
intd512
"%14d"
"%-14d"
"           512"
"512           "
doublef
e
1595.1680010754388
"%14.2f"
"%.7f"
"%14.4e"
"       1595.17"
"1595 . 1680011"
"    1.5952e+03"
Strings"Hello, World"
"%14s"
"%-14s"
"%-14.5s"
"  Hello, World"
"Hello, World  "
"Hello         "

评论

发布