2010-09-11 22 views
18

Soy nuevo en la programación, así que me disculpo de antemano. Estoy ejecutando un programa y estoy teniendo un problema con el método System.out.printf en Java. Sé que todo lo demás en el programa está funcionando correctamente (lo probé). Sin embargo, esto no parece funcionar.Problema con el comando System.out.printf en Java

El error es:

Excepción en el hilo "principal" java.util.IllegalFormatConversionException: d = java.lang.Double
en java.util.Formatter $ FormatSpecifier.failConversion (origen desconocido)!
en java.util.Formatter $ FormatSpecifier.printInteger (origen desconocido)
en java.util.Formatter $ FormatSpecifier.print (origen desconocido)
en java.util.Formatter.format (origen desconocido)
en java .io.PrintStream.format (Desconocido Fuente)
en java.io.PrintStream.printf (origen desconocido)
en Advisor_Score.main (Advisor_Score.java:17)

Mi código es:

import java.lang.Math; 
public class Advisor_Score { 
    public static void main(String[] args){ 
     double l[] = {101,1,1,1}; 
     double k[] = {102,2,2,4}; 
     double m[] = {103,5,5,5,5,5,5,5}; 
     double All_users[][]={l,k,m}; 
     double sum[]=new double [All_users.length]; 
     double [] raw_advisor=new double [All_users.length]; 
     double []advisor_score= new double [All_users.length]; 
     for (int i=0;i<All_users.length;i++){ 
       for(int j=1;j<All_users[i].length;j++){ 
         sum[i]+=All_users[i][j]; 
       } 
       raw_advisor[i]=((sum[i]-(3*(All_users[i].length-1)))/4); 
       advisor_score[i]= 2.5+(2.5*(1-Math.pow(Math.E, -.5*raw_advisor[i]))); 
       System.out.printf("%d: %d\n", All_users[i][0], advisor_score[i]); 
       }  
    } 
} 

No entendemos para qué no funciona.

Respuesta

57

%d representa un número entero; Desea usar %f para un doble. Ver el formatting string syntax en el Javadoc

+6

Es bastante inconveniente que '% d' no sea para un doble ...' double' comienza con la letra 'd' después de todo! : D – HyperNeutrino

+2

@JamesSmith, supongo; significa [decimal] (http://stackoverflow.com/q/13409014/309308), a diferencia de '% x' para hexadecimal o'% o' para octal. C también te permitirá usar '% i' como sinónimo" entero "para'% d', pero parece que Java no lo hace –