Программа компилируется, но затем выдает ошибку Exception в потоке "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 AM\n", h);
for (int i = 1; i <= 11; i++) {
System.out.printf("%8d:00 AM\n", i);
}
System.out.printf("%8d:00 PM\n", h);
for (int i = 1; i <= 11; i++) {
System.out.printf("%8d:00 PM\n", i);
}
System.out.printf("%8d:00 PM\n", 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');
}
}
}
4 ответа
В вашем основном методе вы объявили double f12 = 0.0000;
это, тогда вы вызываете System.out.printf("%8d:00 PM\n", f12);
что приведет к исключению.
Чтобы решить эту проблему, вы можете изменить тип с double
в int
поскольку %d
в System.out.printf("%8d:00 PM\n", f12);
средства int
System.out.printf("%8d:00 PM\n", f12);
f12
удваивается, поэтому может представлять нецелое число часов. Что это значит, по логике? Вы, вероятно, не хотите печатать
3.141592:00 PM
Изменить тип f12
в int
,
System.out.printf("%8d:00 PM\n", f12);
%d используется для десятичных чисел. Но ваш аргумент имеет тип double. Пожалуйста, посмотрите на форматирование
Измените%d на%s, чтобы это исправить -> System.out.printf("%8s:00 PM\n", f12);
Вы можете изменить код для этого -
System.out.printf("%.4f:00\n", f12);
Также объявите f12 как ниже -
float f12 = 0.0000f;