我在Java中遇到printf()遇到麻烦

时间:2020-08-26 01:14:25

标签: java printf

我正在从事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)

2 个答案:

答案 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可能会解决您的问题。