Java:使用printf时发生格式化错误
我到处找了找,找不到这个问题的先例。在这里,我看了以下问题
using printf for multiple formats
Formatting using printf and format
Formatting problems using printf in java
下面我将概述我遇到问题的代码片段。请记住,我正试图更好地理解效率输出,并探索为什么某些输入会导致指数、对数、线性增长等。无论如何
for (int i = 0; i < 5; i++) {
time = System.nanoTime();
tl.timeTrial(N);
elapsedTime = (System.nanoTime() - time) / BILLION;
System.out.print(N + "\t");
System.out.printf("%4.3f\t", elapsedTime);
if (i != 0) {
r = elapsedTime / previousTime;
System.out.printf("%3.2\t", r);
k = Math.log(r);
System.out.printf("%3.2\n", k);
}
else {
System.out.print("\n");
}
previousTime = elapsedTime;
N *= 2;
}
从这里我将指出一些事情
System.out.printf("%4.3\t", elapsedTime);
编译和运行完美。然而,当我进入带有r和k的if语句时,我得到了一个运行时错误,我一辈子都不明白为什么。错误如下:
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '4'
at java.util.Formatter.checkText(Formatter.java:2579)
at java.util.Formatter.parse(Formatter.java:2565)
at java.util.Formatter.format(Formatter.java:2501)
at java.io.PrintStream.format(PrintStream.java:970)
at java.io.PrintStream.printf(PrintStream.java:871)
at TimingLabClient.main(TimingLabClient.java:61)
谢谢你的帮助。希望我不会因为问了一个我再也找不到答案的问题而被禁止
多谢各位。对于那些对我的\t和\n感到困惑的人,它有助于输出格式,而输出格式不一定是完美的
N Time(sec) R K
8 0.723
16 5.760 7.964 2.075
32 47.098 8.176 2.101
这个程序实际上要运行大约7个小时
# 1 楼答案
该代码中有很多问题:
System.out.printf("%3.2\t", r);
毫无意义。当您不给Java一个字符来指示r应该是什么格式时,Java应该如何格式化r。在%
和数字后面必须有一个合适的说明符,这里f
可以工作,这意味着你有一个浮点数:"%4.3f"
李>\t
和{%n
最重要的是,阅读adecent formatting tutorial了解详细信息