2016-04-01 4 views
0

Я пишу небольшую программу, которая рассчитывает налог в зависимости от типа сотрудника и количества отработанных часов (сверхурочное время без сверхурочной работы). Я буду включать полную копию моего кода.Переходя к перегруженной функции - java

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

Моей первая функция имеет введеную какой тип работника является его (подрядчиком или регулярным), а затем запрашивает некоторая базовая информация (empPayRate и empHours) часть, которая переходит к моей grossPayCalc для постоянных сотрудников, кажется, есть ошибка , Это код, который передает значение 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

Похоже, проблема вызвана System.out.printf("Please enter Federal Tax Rate. (e.g. 7.5 would be 7.5%)%n"); в рамках метода taxCalc.
Возможно, вы хотите напечатать 7.5%, но знак процента интерпретируется как спецификатор формата.
Попробуйте ...would be 7.5%%)...

0

проблема в этом методе taxCalc.

Попробуйте добавить знак %, чтобы избежать знака %.

Так, просто замените эту строку:

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");

Смежные вопросы