程序编译,但随后在线程"main" java.util.IllegalFormatConversionException: d != java.lang.Double?



我的程序应该打印出这样的表格:

Time          Fraction Since Midnight
12:00 AM       0.0000
1:00 AM       0.0417
2:00 AM       0.0833
3:00 AM       0.1250
4:00 AM       0.1667
5:00 AM       0.2083
6:00 AM       0.2500
7:00 AM       0.2917
8:00 AM       0.3333
9:00 AM       0.3750
10:00 AM       0.4167
11:00 AM       0.4583
12:00 PM       0.5000
1:00 PM       0.5417
2:00 PM       0.5833
3:00 PM       0.6250
4:00 PM       0.6667
5:00 PM       0.7083
6:00 PM       0.7500
7:00 PM       0.7917
8:00 PM       0.8333
9:00 PM       0.8750
10:00 PM       0.9167
11:00 PM       0.9583

它甚至可以编译,但当我运行它时,我会得到一个错误。我不知道如何修复它。以下是我所拥有的:

public class FractionOfDay {
static double frac = 0;
static double timeSecs = 0;
static int time = 0;
public static void fractionOfDay( int hour, int minute, int second, char 
half) {

if (hour == 12 && minute == 0 && second == 0 && half == 'A') 
{
frac = 0.0000;
System.out.printf("%8.4f", frac);
}
else if (half == 'A') {
timeSecs = ((hour * 3600) + (minute * 60) + second);
frac = (timeSecs / 86400);
System.out.printf("%8.4f", frac);
}
else if (half == 'P') {
timeSecs = ((hour * 3600) + (minute * 60) + second + (12 * 3600));
frac = (timeSecs / 86400);
System.out.printf("%f", frac);
}
}
public static void main (String [] args) {
int h = 12;
double f12 = 0.0000;
System.out.println("        Time     Fraction Since Midnight");
System.out.printf("%8d:00 AMn", h);
for (int i = 1; i <= 11; i++) {
System.out.printf("%8d:00 AMn", i);
}
System.out.printf("%8d:00 PMn", h);
for (int i = 1; i <= 11; i++) {
System.out.printf("%8d:00 PMn", i);
}
System.out.printf("%8d:00 PMn", f12);
for (int i = 1; i <= 11; i++) {
fractionOfDay(i, 0, 0, 'A');
}
for (int i = 1; i <= 11; i++) {
fractionOfDay(i, 0, 0, 'P');
}
}
}

在主方法中,您声明了double f12 = 0.0000;,然后调用System.out.printf("%8d:00 PMn", f12);,这将导致异常。

为了解决此问题,您可以将类型从double更改为int,因为System.out.printf("%8d:00 PMn", f12);中的%d表示int

System.out.printf("%8d:00 PMn", f12); 

%d用于小数。但你的论点是双重的。请查看格式化

将%d更改为%s以修复此问题->System.out.printf("%8s:00 PMn", f12);

System.out.printf("%8d:00 PMn", f12);

f12是一个二重,因此它可以表示非整数小时数。从逻辑上讲,这意味着什么?你可能不想打印

3.141592:00 PM

f12的类型更改为int

您可以将代码修改为这个-

System.out.printf("%.4f:00n", f12);

同时声明f12如下-

float f12 = 0.0000f;

最新更新