2013-04-02 62 views
1

当我编译它时,不断给出错误“这种方法必须返回类型double的结果”,但我相信我的工资是双倍的。出了什么问题?..................................为什么不编译,它不断给我的错误

public double getNetPay (int totalHoursWorked) 
{ 
    int basePayRate = 15; 
    double overTime = 15*1.5; 
    double taxRate1 = 0.25; 
    double taxRate2 = 0.21; 
    double taxRate3 = 0.15; 

    if (totalHoursWorked > 40) 
    { 
     double pay =totalHoursWorked*overTime; 
     if (pay > 1200) 
     { 
     return pay*taxRate1; 
     } 
    if (pay >=500||pay <1199) 
    { 
      return pay*taxRate2; 
     } 
     if (pay <=499) 
     { 
     return pay*taxRate3; 
     } 
     } 
     else 
     { 
      double pay =totalHoursWorked*basePayRate; 
      if (pay > 1200) 
      { 
       return pay*taxRate1; 
      } 
      if (pay >=500||pay <1199) 
      { 
       return pay*taxRate2; 
      } 
      if (pay <=499) 
      { 
       return pay*taxRate3; 
      } 
     } 
} 
+1

'totalHoursWorked'乘以'overTime'?我希望我的雇主使用这样的公式。我现在已经退休了! – NPE

回答

4

您需要添加一个条件块外的return语句。
由于条件块不能保证始终执行,所以Java需要确保该方法总是按照承诺返回。

你可以做这样的事情

double defaultTaxRate = 0.33; // put some desired value 
if (totalHoursWorked > 40) 
{ 
    // All conditional blocks 
} 
return pay*defaultTaxRate; 
+0

谢谢!,我的代码现在可以工作 –

+0

@PhilipHung:很高兴我能帮忙! – xyz

1

当然,你的付出是双倍,但你从内返回,如果condition.Java编译器会给出错误,因为如果条件为假,那么它不会执行该return语句,所以,你必须清楚地看到,在任何情况下的东西(这是此双)必须return.for例如:

public int get() { 
if(condition) { 
return one_integer_value; 
} else { 
return another_integer_value; 
} 
1

没有什么不对您的返回类型。它只有double。您创建if条件的方式是错误的。这里有可能你的if条件没有得到满足并且return语句没有被执行。因此编译器是给错误,你This method must return a result of type double

public double getNetPay(int totalHoursWorked) { 
     int basePayRate = 15; 
     double overTime = 15 * 1.5; 
     double taxRate1 = 0.25; 
     double taxRate2 = 0.21; 
     double taxRate3 = 0.15; 
     double result = 0d; 

     if (totalHoursWorked > 40) { 
      double pay = totalHoursWorked * overTime; 
      if (pay > 1200) { 
       result = pay * taxRate1; 
      } else if (pay >= 500 || pay < 1199) { 
       result = pay * taxRate2; 
      } else if (pay <= 499) { 
       result = pay * taxRate3; 
      } 
     } else { 
      double pay = totalHoursWorked * basePayRate; 
      if (pay > 1200) { 
       result = pay * taxRate1; 
      } else if (pay >= 500 || pay < 1199) { 
       result = pay * taxRate2; 
      } else if (pay <= 499) { 
       result = pay * taxRate3; 
      } 
     } 
     return result; 
    } 
1

在命令式语言中好的做法太最小化的方法return语句的数量。

public int get() { 
    int result = default_value; 
    if(condition) { 
     result = one_integer_value; 
    } else if (another_condition) { 
     result = another_integer_value; 
    } 
    return result; 
} 

它使代码更清晰,避免了这种问题。无论如何,在某些情况下它没有被完全占有。以此为建议不是一个严格的规则,这个想法本身就是辩论: Should a function have only one return statement?

0

使用的Eclipse IDE这有助于找出编译时错误。 return声明总是应该在任何块之外。在一个方法中避免多个return语句,而不是创建一个变量,并在该方法结束时返回该变量。

相关问题