2016-04-01 20 views
0

私は、従業員のタイプと作業時間(オーバータイムと非オーバータイム)に基づいて税金を計算する小さなプログラムを作成しています。私は自分のコードの完全なコピーを含めます。オーバーロードされた関数に渡す -

import java.util.Scanner; 

public class Payroll 
{ 
    Scanner input = new Scanner(System.in); 

     private int empType; 
     private double contractorId; 
     private double empPayRate; 
     private double empHours; 
     private double empOtHours; 
     private double empOtPay; 
     private double fedTax; 
     private double stateTax; 
     private double empGrossPay; 
     private double empNetPay; 
     private double empFedTax; 
     private double empStateTax; 
     private double empTotalTax; 
     private double empRegPay; 

    public int empTypeCalc() 
    //calculate employee type 

    { 
     System.out.printf("What type of employee is this?%nEnter 1 for regular employee and 2 for contractors, or 3 to quit: "); 
     int empType = input.nextInt(); 

      if (empType == 1) 
      { 
      System.out.printf("Input employee's pay rate:%n"); 
      empPayRate = input.nextDouble(); 
      System.out.printf("Input employee's hours worked:%n"); 
      empHours = input.nextDouble(); 

      grossPayCalc(empPayRate, empHours); 
      } 

      else if (empType == 2) 
      { 
      System.out.printf("Input contractor's pay rate:%n"); 
      empPayRate = input.nextDouble(); 
      System.out.printf("Input contractors's hours worked:%n"); 
      empHours = input.nextDouble(); 
      System.out.printf("Input contractors's ID number:%n"); 
      contractorId = input.nextInt(); 

      grossPayCalc(empPayRate, empHours, contractorId); 
      } 

      else if (empType == 3) 
      { 
      System.out.printf("Ending program. Have a nice day.%n"); 
      } 

      else 
      { 
      System.out.printf("Invalid employee type entered please retry.%n"); 
      empTypeCalc(); 
      } 
      return empType; 
    } 

    public double grossPayCalc(double empPayRate, double empHours) 
    //calculate regular employee pay 

    { 
     if (empHours <= 40) 
     { 
      empGrossPay = empPayRate * empHours; 

      taxCalc(empHours, empPayRate, empGrossPay); 
     } 
     else 
     { 
      otPayCalc(empHours, empPayRate, empGrossPay); 
     } 
     return empPayRate; 
    } 


    public double otPayCalc(double empHours, double empPayRate, double empGrossPay) 
    //calculate Overtime pay for regular employees 

    { 
     if (empHours <= 65) 
     { 
      empOtHours = empHours - 40; 
      empRegPay = 40 * empPayRate; 
      empOtPay = empOtHours * empPayRate * 1.5; 
      empGrossPay = empOtPay + empRegPay; 

      otTaxCalc(empOtPay, empOtHours, empRegPay, empGrossPay, empHours, empPayRate); 
     } 
     else if (empHours > 65) 
     { 
      System.out.println("Employee May not work more than 65 Hours.%n"); 
      empTypeCalc(); 
     } 
     return empOtHours; 
    } 

    public double grossPayCalc(double empPayRate, double empHours, double contractorId) 
    //calculate contractor pay 

    { 
     if (empHours <= 50) 
     { 
      empGrossPay = empPayRate * empHours; 
      System.out.printf("Contractor's gross pay is $%.2f.%n%n", empGrossPay); 
      empTypeCalc(); 
     } 
     else 
     { 
      System.out.printf("Contractor may not work more than 50 hours per week. Please try again.%n%n"); 
      empTypeCalc(); 
     } 
     return empPayRate; 
    } 

    public double otTaxCalc(double empOtPay, double mpOtHours, double empRegPay, double empGrossPay, double empHours, double empPayRate) 
    //calc tax for regular employees 

    { 
      System.out.printf("Please enter Federal Tax Rate. (e.g. 7.5 would be 7.5%)%n"); 
      fedTax = input.nextDouble(); 
      System.out.printf("Please enter State Tax Rate. (e.g. 7.5 would be 7.5%)%n"); 
      stateTax = input.nextDouble(); 

      empFedTax = (empGrossPay/100) * fedTax; 
      empStateTax = (empGrossPay/100) * stateTax; 
      empTotalTax = empStateTax + empFedTax; 
      empNetPay = empGrossPay - empTotalTax; 

      System.out.printf("Employee's Federal tax ammount is $%.2f.%n", empFedTax); 
      System.out.printf("Employee's State tax ammount is $%.2f.%n", empStateTax); 
      System.out.printf("Employee's total tax ammount is $%.2f.%n", empTotalTax); 
      System.out.printf("Employee's Federal Tax ammount is $%.2f.%n", empNetPay); 
      empTypeCalc(); 

      return empFedTax; 
    } 

    public double taxCalc(double empHours, double empPayRate, double empGrossPay) 
    { 
      System.out.printf("Please enter Federal Tax Rate. (e.g. 7.5 would be 7.5%)%n"); 
      fedTax = input.nextDouble(); 
      System.out.printf("Please enter State Tax Rate. (e.g. 7.5 would be 7.5%)%n"); 
      stateTax = input.nextDouble(); 

      empFedTax = (empGrossPay/100) * fedTax; 
      empStateTax = (empGrossPay/100) * stateTax; 
      empTotalTax = empStateTax + empFedTax; 
      empNetPay = empGrossPay - empTotalTax; 

      System.out.printf("Employee's Federal tax ammount is $%.2f.%n", empFedTax); 
      System.out.printf("Employee's State tax ammount is $%.2f.%n", empStateTax); 
      System.out.printf("Employee's total tax ammount is $%.2f.%n", empTotalTax); 
      System.out.printf("Employee's Federal Tax ammount is $%.2f.%n", empNetPay); 
      empTypeCalc(); 

      return empFedTax; 
    } 
} 

私の最初の関数は、正規従業員のための私のgrossPayCalcに渡す部分がエラーを持っているようだし、いくつかの基本的な情報(empPayRateとempHours)を尋ね、あなたにそれが(請負業者または定期的)である従業員のどのようなタイプの入力を持っています。これは、grossPayCalcに渡すコードです。

if (empType == 1) 
    { 
    System.out.printf("Input employee's pay rate:%n"); 
    empPayRate = input.nextDouble(); 
    System.out.printf("Input employee's hours worked:%n"); 
    empHours = input.nextDouble(); 

    grossPayCalc(empPayRate, empHours); 
    } 

これは、私はエラーを取得した後

public double grossPayCalc(double empPayRate, double empHours) 
//calculate regular employee pay 

{ 
    if (empHours <= 40) 
    { 
     empGrossPay = empPayRate * empHours; 

     taxCalc(empHours, empPayRate, empGrossPay); 
    } 
    else 
    { 
     otPayCalc(empHours, empPayRate, empGrossPay); 
    } 
    return empPayRate; 
} 

に渡す必要があります。

What type of employee is this? 
Enter 1 for regular employee and 2 for contractors, or 3 to quit: 1 
Input employee's pay rate: 
50 
Input employee's hours worked: 
40 
Exception in thread "main" java.util.UnknownFormatConversionException: Conversio 
n = ')' 
     at java.util.Formatter.checkText(Unknown Source) 
     at java.util.Formatter.parse(Unknown Source) 
     at java.util.Formatter.format(Unknown Source) 
     at java.io.PrintStream.format(Unknown Source) 
     at java.io.PrintStream.printf(Unknown Source) 
     at Payroll.taxCalc(Payroll.java:146) 
     at Payroll.grossPayCalc(Payroll.java:72) 
     at Payroll.empTypeCalc(Payroll.java:36) 
     at PayrollTest.main(PayrollTest.java:6) 

このエラーの原因は不明です。これは、メソッド/メソッドのオーバーロードを渡す際にエラーですか?私はこのエラーの原因を知りたいと思っています。また、これが今後起こることをどうやって防ぐことができますか?

答えて

0

taxCalcの中にSystem.out.printf("Please enter Federal Tax Rate. (e.g. 7.5 would be 7.5%)%n");が原因で問題が発生しているようです。
7.5%を印刷することをお勧めしますが、パーセント記号は書式指定子として解釈されます。
問題は、この方法taxCalcである...would be 7.5%%)...

0

を試してみてください。

%記号を追加して%記号をエスケープしてみてください。そして、他の同様のラインで同じことを行う

System.out.printf("Please enter Federal Tax Rate. (e.g. 7.5 would be 7.5%%)%n"); 

System.out.printf("Please enter Federal Tax Rate. (e.g. 7.5 would be 7.5%)%n"); 

だから、ちょうどこのラインを交換してください。

0

taxCalcメソッドでは、パーセント記号とそれの後ろに括弧があります。

System.out.printf("Please enter Federal Tax Rate. (e.g. 7.5 would be 7.5%%)%n");

このようにするには、二重パーセント記号を使用する必要があります。
関連する問題