2011-11-03 47 views
2

我對Java很陌生。 Eclipse是給我的錯誤解決Java中的「該方法必須返回int類型的結果」

該方法必須返回一個int類型的結果

以下代碼:

public class firstprog { 
    public static int largest(int a, int b, int c) { 
     if (a > b) { 
      if (a > c) { 
       return a; 
      } else if (b > c) { 
       return b; 
      } else { 
       return c; 
      } 
     } 
    } 

    public static void main(String args[]) { 
     int a = 7; 
     int b = 8; 
     int c = 9; 

     System.out.println(largest(a, b, c)); 
    } 
} 

爲什麼會這樣呢?

+0

可能重複[是否必須在className.java中編碼class className?](http://stackoverflow.com/questions/2843438/is-it-necessary-that-c​​lass-classname-must-be -coded-class-class-java) –

+0

@Joachim這不是一個愚蠢的行爲。 Anant沒有說出他的文件是什麼,但是它不能有多於一個類的聲明。 –

+0

我只想指出,Java中的類名應始終(最好的做法)以大寫字符開頭。 – Anders

回答

3

是的問題是,每個文件只能有一個公共類,並且該文件應該具有與該類相同的名稱。您可以在第一課的定義前刪除公衆。 更好的方法做將是使其成爲主類的靜態方法。

爲了解決你,你可以這樣做第二個問題:

public class firstprog { 


    public static int largest(int a,int b,int c) 
    { 
     if(a>b) 
     { 
      if(a>c) 
       return a; 
      else 
       if(b>c) 
        return b; 
       else 
        return c; 
     } 
     else 
     { 
      if(b>c) 
       return b; 
      else 
       return c; 
     } 
    } 

    public static void main(String args[]) { 

     int a=19; 
     int b=2; 
     int c=1; 

     System.out.println(largest(a,b,c)); 
    } 
} 
+0

非常感謝。我仍然得到一個錯誤,這是:**這個方法必須返回一個int **類型的結果 - 這裏討論的方法是方法funk() – Anant

+0

好的,你可以把你的更新代碼,以便我們可以幫助? – lc2817

+0

@Anant:問問自己:如果'a'不是*'> b',它會返回什麼?一個方法必須在*每個可能的路徑*中返回一個值(除了拋出異常的地方)。 –

2

每個.java文件只允許有一個公共頂級類(頂級類不包含在另一個類中)。

在funk.java中定義funk沒有其他頂級類。

將其他頂級類放入其文件名與類名相匹配的文件中。

關於第二個問題,如果您聲明瞭返回特定類型的方法,如int,那麼通過該方法的所有路徑必須導致return語句返回有效值。在您的示例中,可能不會輸入if語句!

如果b == aa < b會發生什麼情況?

+0

在這種情況下,我沒有看到在單獨的文件中定義它的目的。 – lc2817

+0

@ lc2817爲什麼呢? –

+0

@HunterMcMillen你爲什麼要這樣做?你認爲這是一個好的做法嗎? – lc2817

1

你試圖把多個類合併成一個文件?每個類都應該使用適當的名稱來獲得自己的.java文件。還要將類的首字母作爲大寫,因爲這是命名約定。

另外,只有a大於c時,函數纔會起作用。你錯過了一些案件。

編輯:你可以有嵌套類,但我想你可能想要遠離現在這樣的東西。

1

在Java中,公共類必須位於名稱與類名相同的單獨文件中。

所以把你的funk類放在funk.java文件和firstprog類中firstprog.java文件中 或刪除public放在funk類中,那麼這個類將有默認的包修飾符。

0

對於你的第二個錯誤,邏輯似乎有點...在b> a的情況下沒有返回語句。

0

這是爲什麼?

如果你的意思是「爲什麼我會得到這個錯誤」,這是因爲你沒有把類放在它自己的文件中,而且你必須。如果你的意思是「爲什麼我必須把這個類放在它自己的文件中」,那是因爲Java這樣說:每個文件一個public類型(類或接口)。

具體來說,「它自己的」文件必須具有相同的名稱:public class funk進入funk.java,並且public class firstprog進入firstprog.java

0
public class firstprog { 

    public static int largest(int a,int b,int c) 
    { 

     if(a>b) 
     { 
       if(a>c) 
       { 
        return a; 
       } 
       else if(b>c) 
       { 
        return b; 
       } 
       else 
       { 
        return c; 
       } 
     } 
     return 0; 
    } 

    public static void main(String args[]) { 

     int a=7; 
     int b=8; 
     int c=9; 

     System.out.println(largest(a,b,c)); 

    } 
} 

注意:你必須添加return語句,因爲不大於B,所以它不會去,如果塊的內部。在您的larget(...)它期待return語句爲I​​NT ..所以你必須添加一個更多的返回語句。那麼它的工作......乾杯...... !!!

+0

是的,他需要在最後添加一個'return'語句。然而,返回'0'不是正確答案 - 如果所有輸入都大於這個值,則_especially_ ... –

相關問題