2014-02-19 50 views
0

前兩種方法有效,但接下來的兩種方法不能編譯。他們怎麼了?它說他們兩人的表達非法開始。我對方法相當陌生,所以任何建議都會有所幫助。我並不真正瞭解方法規則,但似乎它們與前兩者完全相同,所以我很困惑。下面的代碼:爲什麼前兩種方法沒問題,但接下來的兩種方法不能編譯?

public class MathMethods{ 
    public static int factorial (int n) { 
     int fact = 1; int i; 
     for (i=1; i<=n; i++){ 
     fact = fact * i; 
     } 
     return fact; 
    } 

    public static double absoluteValue (double a) { 
     if(a>=0){ 
      return a; 
     } 
     else{ 
      return a * -1; 
     } 

    public static double minOf3Numbers (double a , double b , double c) { 
     if(a <= b && b < c){ 
      return a; 
     } 
     else if(b <= a && b < c){ 
      return b; 
     } 
     else{ 
      return c; 
     } 
    } 

    public static int leapYear (int a) { 
     if(a % 400 == 0){ 
      return ("IT IS A LEAP YEAR"); 
     } 
     else if(a % 100 == 0){ 
      return ("IT IS NOT A LEAP YEAR"); 
     } 
     else if(a % 4 ==0){ 
      return ("IT IS A LEAP YEAR"); 
     } 
     else{ 
      return ("IT IS NOT A LEAP YEAR"); 
     } 
    } 

    //public static void main(String args[]) { 
     //System.out.print("The factorial of 12 is "); 
     //System.out.println(MathMethods.factorial(12)); 
    } 
} 
+2

因爲你還沒有關閉第二種方法,並且你爲最後的方法返回了不正確的類型 – Reimeus

+0

像Eclipse或NetBeans這樣的IDE會給你提供一個很好的紅色箭頭,正是問題所在。 – chrylis

回答

0

您聲明int作爲返回類型

public static int leapYear (int a) 

,但你正在返回String

return ("IT IS NOT A LEAP YEAR"); 

而且absoluteValue()缺少一個右括號。我會建議使用IDE,比如Eclipse,這大大有助於追蹤這些錯誤。

+0

另外,提到他們錯過了一個緊密的大括號。 – kevinsa5

+0

@ kevinsa5真的,謝謝 – Warlord

3

首先,您在absoluteValue方法中缺少結尾大括號。其次,您將返回所有String而不是int s在leapYear

結束括號添加到absoluteValue,並要麼改變的leapYear返回類型String或更改所有return語句該方法返回int值。

+0

我該如何讓它返回一個字符串值?但保持一個int輸入? – user3284325

+0

你可以讓它返回一個'String',但接受'int'作爲輸入。那沒問題。 – rgettman

+0

如何在這種情況下返回字符串值? – user3284325