2013-04-02 76 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語句,而不是創建一個變量,並在該方法結束時返回該變量。

相關問題