问题
I'm trying to create a tester class, but in doing so I have gotten an error which states:
1 error found:
Error: The method printData(double, double) in the type PayCalculator is not
applicable for the arguments ()
How do I fix it? This my tester code
PayCalculator p1 = new PayCalculator();
p1.setHourlyRate(8.25);
p1.setHoursWorked(45.0);
p1.printData();
my main code
{
private double hourlyRate;
private double hoursWorked;
public PayCalculator()
{
hourlyRate = 0.0;
hoursWorked = 0.0;
}
/**
* Two parameter constructor
* Add hourlyRate and hoursWorked
* @param the hourly rate
* @param the hours worked
*/
public PayCalculator(double aHourlyRate, double aHoursWorked)
{
hourlyRate = aHourlyRate;
hoursWorked = aHoursWorked;
}
/**
* sets the hourly rate
* @return hourlyRate
*/
public void setHourlyRate(double aHourlyRate)
{
hourlyRate = aHourlyRate;
}
/**
* gets the hourly rate
* @param hourlyRate
*/
public double getHourlyRate()
{
return hourlyRate;
}
/**
* sets the hours worked
* @return hoursWorked
*/
public void setHoursWorked(double aHoursWorked)
{
hoursWorked = aHoursWorked;
}
/**
* gets the hours worked
* @param hours worked
*/
public double getHoursWorked()
{
return hoursWorked;
}
public boolean workedOvertime()
{
if (hoursWorked > 40)
{
return true;
}
else
{
return false;
}
}
public double numHoursOvertime()
{
if (hoursWorked > 40)
{
return hoursWorked - 40;
}
else
{
return 0;
}
}
public double calculateGrossPay()
{
if (hourlyRate <= 10.25)
{
if (hourlyRate <= 40)
return hourlyRate * hoursWorked;
}
else
{
double grossPay = ((40 * hourlyRate) + ((hourlyRate * 2) * hoursWorked - 40));
return grossPay;
}
if (hoursWorked <= 60)
{
return hourlyRate * hoursWorked;
}
else
{
return 60 * hourlyRate;
}
}
public double determineTaxRate(double grossPay)
{
if (grossPay >= 800)
{
double tax = 0;
tax = grossPay * 0.37;
return tax;
}
else if ( grossPay >= 400)
{
double tax = 0;
tax = grossPay * 0.22;
return tax;
}
else
{
double tax = 0;
tax = grossPay * 0.12;
return tax;
}
}
public double calculateNetPay(double grossPay, double tax)
{
double calculateNetPay = grossPay - tax;
return calculateNetPay;
}
public void printData(double grossPay, double tax)
{
System.out.println("Hours Worked: " + hoursWorked);
System.out.println("Hourly rate: " + hourlyRate);
System.out.println("Number of hours of overtime worked: " + numHoursOvertime());
System.out.println("Worked overtime? " + workedOvertime());
System.out.println("Gross pay: " + calculateGrossPay());
System.out.println("Tax Rate: " + determineTaxRate(grossPay));
System.out.println("Net Pay: " + calculateNetPay(grossPay, tax));
}
}
回答1:
Well yes. Here's the method declaration:
public void printData(double grossPay, double tax)
And here's how you're trying to call it:
p1.printData();
What values do you expect to be used for grossPay and tax?
To be honest it seems odd that you should have to pass in grossPay having already specified the hours worked and hourly rate, but that's a different matter. The most immediate problem is that you're not providing the arguments your method requires.
回答2:
Your method expects two values grossPay and tax :
public void printData(double grossPay, double tax)
But you are not providing grossPay and tax to it when calling it :
p1.printData();
Include the value of grossPay and tax when calling your method and it will work fine like :
p1.printData(123.00,2.5);
回答3:
Definition of your method is:
public void printData(double grossPay, double tax)
It expects call with two double arguments whereas you are calling with no argument:
p1.printData();
Pass double arguments to printData(44.85d, 77.56d)
来源:https://stackoverflow.com/questions/15286774/method-not-applicable-for-arguments