如何以及以什么顺序将printf格式化参数组合为由字符串和双精度组成的单个打印输出?

时间:2016-10-07 19:27:18

标签: java printf

下午好,

以下是三行java代码,我想将它们组合成一个printf语句。这个想法是最终有几列均匀间隔的数据用计算机科学记数法表示,有5位有效数字。我似乎无法以正确的顺序组合这些论点。此外,当我尝试通过添加额外的"% - #s"来格式化多个列时格式,我被告知我没有包含足够的论据,或者有趣的东西出来了。我做错了什么?

System.out.printf("%-3s", "a_"+k+" = ");
System.out.printf("%6.3e\n", a_k[k]);
System.out.printf("%6.3e\n", a1_k[k]);

我已经尝试了以下各种命令和组合,但无法理解javadocs如何正确实现这一点:

System.out.printf("%-3s%5.4e%-10s%5.4e\n", "a_"+k+" = ", a_k[k], a1_k[k]);

谢谢!

1 个答案:

答案 0 :(得分:3)

  

当我尝试通过添加额外的“% - #s”格式来格式化多个列时,我被告知我没有包含足够的参数

期待a_k[k]a1_k[k]之间的字符串参数。

以下是我认为你想要的四种格式。

  1. %-3s - > "a_" + k + "= "
  2. %5.4e - > a_k[k]
  3. %-10s - > (空白)
  4. %5.4e - > a1_k[k]
  5. 因此,只需为位置3插入""

    System.out.printf("%-3s%5.4e%-10s%5.4e\n", "a_"+k+" = ", a_k[k], "", a1_k[k]);
    

    See example

    或者,为了让眼睛更容易

    String akEq = "a_"+k+" = ";
    float col1 = a_k[k];
    float col2 = a1_k[k];
    System.out.printf("%-3s%5.4e%-10s%5.4e\n", akEq, col1, "", col2);
    

    而且,更进一步,将"a_%d = "放入格式中,而不是使用字符串连接

    System.out.printf("a_%d = %5.4e%-10s%5.4e\n", k, col1, "", col2);