我的程序应该打印出这样的表格:
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;