2013-08-30 2 views
3
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)); 

    } 
} 

-Это то, на что это похоже. Он вычисляет окружность, но не остальное.Что я делаю неправильно? Java IllegalFormatConversionException

Enter the radius of the circle to find circumference, diameter, and area 

10 

The circumference is 62.831853 

Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.Integer 
    at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4045) 
    at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2761) 
    at java.util.Formatter$FormatSpecifier.print(Formatter.java:2708) 
    at java.util.Formatter.format(Formatter.java:2488) 
    at java.io.PrintStream.format(PrintStream.java:970) 
    at java.io.PrintStream.printf(PrintStream.java:871) 
    at circleinfo.Circleinfo.main(Circleinfo.java:30) 

Диаметр Java Результат: 1

+0

'System.out.printf («Диаметр% е \ п» , (r * 2)); 'там' r * 2' является целым числом, но вы вызываете printf на нем как float. Используйте '% d' вместо'% f'. –

ответ

7

r является int, поэтому r*2 также int, что означает, что в вашем втором заявлении для печати %f не может быть использован. Попробуйте вместо этого %d.

Напомним, что %f предназначен для чисел с плавающей точкой, а %d - для целых чисел. Это описано в документации Formatter (см. Format String Syntax).

3

(r*2) будет int, а не float, как это rint и 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. 
+0

Что мы используем для двойного? –

+0

Я бы сказал% f, так как вы можете легко установить десятичную точку с ней – Manticore

1

Это происходит потому, что вы должны были поместить %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)); 
    } 
}