2010-09-11 16 views
18

Ich bin neu in der Programmierung, also entschuldige ich mich vorher. Ich führe ein Programm und habe ein Problem mit der System.out.printf Methode in Java. Ich weiß, dass alles andere im Programm richtig funktioniert (getestet). Dies scheint jedoch nicht zu funktionieren.Problem mit System.out.printf Befehl in Java

Der Fehler ist:

Exception in thread "main" java.util.IllegalFormatConversionException: d = java.lang.Double
bei java.util.Formatter $ FormatSpecifier.failConversion (Unknown Source)!
bei java.util.Formatter $ FormatSpecifier.printInteger (Unknown Source)
bei java.util.Formatter $ FormatSpecifier.print (Unknown Source)
bei java.util.Formatter.format (Unknown Source)
bei java .io.PrintStream.format (Unbekannt Source)
bei java.io.PrintStream.printf (Unknown Source)
bei Advisor_Score.main (Advisor_Score.java:17)

Mein Code ist:

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]); 
       }  
    } 
} 

Nicht wirklich sicher, warum es funktioniert nicht.

Antwort

57

%d steht für eine ganze Zahl; Sie möchten %f für ein Doppel verwenden. Siehe die formatting string syntax in der Javadoc

+6

Es ist ziemlich unbequem, dass '% d' nicht für eine Doppel ist ...' Doppel' beginnt mit dem Buchstaben 'd' immerhin! : D – HyperNeutrino

+2

@JamesSmith Ich nehme an; es steht für [dezimal] (http://stackoverflow.com/q/13409014/309308), im Gegensatz zu '% x' für hexadezimal oder'% o' für oktal. C erlaubt Ihnen auch,% i als ein "Integer" -Synonym für '% d' zu verwenden, aber es sieht so aus, als ob Java nicht funktioniert –