我做错了什么?Java IllegalFormatConversionException

我做错了什么?Java IllegalFormatConversionException,java,Java,我有一些计算圆属性的代码: package circleinfo; import java.util.Scanner; public class Circleinfo { public static void main(String[] args) { Scanner input=new Scanner(System.in); int r; System.out.print("Enter the radius of the cir

我有一些计算圆属性的代码:

package circleinfo;

import java.util.Scanner;

public class Circleinfo {

    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);
        int r;

        System.out.print("Enter the radius of the circle to find circumference, diameter, and area\n");

        r = input.nextInt();

        System.out.printf("The circumference is %f\n",(2*r*Math.PI));
        System.out.printf("The diameter is %f\n",(r*2));
        System.out.printf("The area is %f\n",(r*r*Math.PI));

    }
}
它计算周长,但不计算其余的

输入圆的半径以查找周长、直径和面积
10
周长为62.831853
线程“main”java.util.IllegalFormatConversionException中的异常:f!=java.lang.Integer
在java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4045)
位于java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2761)
位于java.util.Formatter$FormatSpecifier.print(Formatter.java:2708)
位于java.util.Formatter.format(Formatter.java:2488)
位于java.io.PrintStream.format(PrintStream.java:970)
位于java.io.PrintStream.printf(PrintStream.java:871)
位于circleinfo.circleinfo.main(circleinfo.java:30)
直径为Java结果:1

r
是一个
int
,因此
r*2
也是一个
int
,这意味着在第二次打印语句中不能使用
%f
。请改为在那里尝试
%d

回想一下,
%f
表示浮点数,
%d
表示整数。这在(参见)的文档中有概述。

(r*2)
将是
int
,而不是
float
,因为
r
int
,而
2
int
。改用
%d

%c          char    Character
%d          int         Signed decimal integer.  
%e, %E      float       Real number, scientific notation (lowercase or uppercase exponent marker)
%f         float    Real number, standard notation.

这是因为必须在直径结果中输入
%d
格式,而不是
%f

import java.util.Scanner;
public class CircleInfo{
    public static void main(String[] args){

            Scanner input = new Scanner(System.in);
            int radio;
            System.out.print("Input radio: ");
            radio = input.nextInt();

            System.out.printf("%s%d%n","Diameter= ",(2*radio));
            System.out.printf("%s%f%n","Area= ",(Math.PI*radio*radio));
            System.out.printf("%s%f%n","Circumference = ",(2*Math.PI*radio));
    }
}

System.out.printf(“直径为%f\n”,(r*2))在那里
r*2
是一个整数,但是你在上面调用printf就像一个浮点。在那里使用
%d
而不是
%f
。我们用什么来表示双精度?