2015-03-03 68 views
1

我在我的代码上找到一条错误消息,以查找支付$ 200 +佣金额的员工的总工资。一旦输入了所有员工的总销售额,就应该列出落入不同薪酬类别的员工数量。下面是代码:非法转换异常?

public static void main(String[]args){ 
    Scanner input = new Scanner(System.in); 
    int basePay = 200; //$200 starting amount of pay 
    int totalPay = 0; //total amount the employee will receive 

    System.out.print("Enter the amount of employees: "); 
    int employee = input.nextInt(); 

    int[]sales = new int[9]; //four different categories 

    for(int i = 0; i < employee; i++){ 
     System.out.println("Enter the current employee's gross sales: "); 
     int grossSales = input.nextInt(); 

     totalPay = (int) (basePay + (grossSales * 0.09)); //uses the formula for finding pay, and then casts it to an int 

     if(totalPay <= 299.99){ 
      sales[0]++; 
     } 
     else if(totalPay <= 399.99){ 
      sales[1]++; 
     } 
     else if(totalPay <= 499.99){ 
      sales[2]++; 
     } 
     else if(totalPay <= 599.99){ 
      sales[3]++; 
     } 
     else if(totalPay <= 699.99){ 
      sales[4]++; 
     } 
     else if(totalPay <= 799.99){ 
      sales[5]++; 
     } 
     else if(totalPay <= 899.99){ 
      sales[6]++; 
     } 
     else if(totalPay <= 999.99){ 
      sales[7]++; 
     } 
     else if(totalPay >= 1000){ 
      sales[8]++; 
     } 
    } 
    System.out.println("Total Sales\tAmount of employees"); 

    for(int i = 0; i < 11; i++){ 
     System.out.printf("%02d-%02d: ", i * 100, i * 100 + 99.99); 
     System.out.print("\t" + sales[i]); 
    } 

    System.out.println("Checking array: " + Arrays.toString(sales)); 
} 

这里是确切的错误消息我得到:

00-Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double 
    at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) 
    at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) 
    at java.util.Formatter$FormatSpecifier.print(Unknown Source) 
    at java.util.Formatter.format(Unknown Source) 
    at java.io.PrintStream.format(Unknown Source) 
    at java.io.PrintStream.printf(Unknown Source) 
    at chapter7.Sales_comission.main(Sales_comission.java:54) 

我相信这是值得做的双重转换,但我不能完全确定什么是错的它?任何人都可以帮我弄清楚什么是错的(它编译没有错误)?我也试过只有双打(包括数组),但是这并没有解决问题。

+0

我认为申诉可能是关于将'%02d'应用于双重表达式'i * 100 + 99.99'。 – 2015-03-03 03:18:35

回答

3

'd'用于整数,将其更改为'f'或将第二个参数转换为整数。

System.out.printf("%02d-%02d: ", i * 100, (int)(i * 100 + 99.99)); 

查看Java String Formatter Doc了解详情。

+0

它的工作,但现在它不再正确地计数值。 – person3122 2015-03-03 03:43:11

+0

您可以使用“%.2f”格式化float/double。即System.out.printf(“%02d - %2f:”,i * 100,i * 100 + 99.99); – Dongqing 2015-03-03 04:43:39