我正在从事Java作业,并且我之前已经编写了这个简单的代码;但是,本学期的教授对我们如何格式化代码比对代码是否起作用更感兴趣。我有2条使用printf的语句可以正常运行,但是第3条没有。我将其更改为带有平均值的println语句,它可以正常打印,但是我需要为该分配使用printf。如果我将printf的平均注释掉,那么前2条printf语句将正常运行。
//Set variables for calculations and perform arithmetic
int sum = num1 + num2 + num3;
double average = (double)sum/3;
int product = num1 * num2 * num3;
int smallest;
int largest;
System.out.printf("The sum is: %d\n", sum);
System.out.printf("The product is: %d\n", product);
System.out.printf("The average is: %d\n", average);
错误如下:
The sum is: Exception in thread "main" 10
The product is: 18
The average is: java.util.IllegalFormatConversionException: d != java.lang.Double
at java.base/java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4426)
at java.base/java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2938)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2892)
at java.base/java.util.Formatter.format(Formatter.java:2673)
at java.base/java.io.PrintStream.format(PrintStream.java:1209)
at java.base/java.io.PrintStream.printf(PrintStream.java:1105)
at Assignment_1.main(Assignment_1.java:49)
答案 0 :(得分:1)
使用System.out.printf("The average is: %f\n", average);
代替System.out.printf("The average is: %d\n", average);
因为双精度变量的格式为%f
(%d
是整数)
println
正常工作,因为它会自动设置变量格式。
答案 1 :(得分:1)
之所以会这样,是因为您的平均值是两倍,而不是整数。尝试打印平均值时,您使用的是%d
,它是int值的转换说明符。将其更改为%f
可能会解决您的问题。