私は、従業員のタイプと作業時間(オーバータイムと非オーバータイム)に基づいて税金を計算する小さなプログラムを作成しています。私は自分のコードの完全なコピーを含めます。オーバーロードされた関数に渡す -
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)
このエラーの原因は不明です。これは、メソッド/メソッドのオーバーロードを渡す際にエラーですか?私はこのエラーの原因を知りたいと思っています。また、これが今後起こることをどうやって防ぐことができますか?